diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c3d113c --- /dev/null +++ b/.env.example @@ -0,0 +1,131 @@ +# LogicMonitor MCP Server Configuration +# Copy this file to .env and customize for your deployment + +# ============================================================================ +# Server Configuration +# ============================================================================ + +# Port for HTTP/HTTPS server (default: 3001) +PORT=3001 + +# Host to bind to (default: 0.0.0.0 for all interfaces) +HOST=0.0.0.0 + +# Node environment (development, production, test) +NODE_ENV=development + +# ============================================================================ +# Transport Configuration +# ============================================================================ + +# Enable STDIO transport (default: true) +# Used for local AI assistants like Claude Desktop +ENABLE_STDIO=true + +# Enable HTTP/HTTPS transport (default: true) +# Used for remote/shared deployments +ENABLE_HTTP=true + +# ============================================================================ +# HTTPS Configuration +# ============================================================================ + +# Enable HTTPS (default: false) +# Strongly recommended for production deployments +HTTPS_ENABLED=false + +# HTTPS port (default: 3443) +HTTPS_PORT=3443 + +# Path to SSL certificate file (required if HTTPS_ENABLED=true) +# HTTPS_CERT_PATH=/path/to/cert.pem + +# Path to SSL private key file (required if HTTPS_ENABLED=true) +# HTTPS_KEY_PATH=/path/to/key.pem + +# Path to SSL CA certificate file (optional) +# HTTPS_CA_PATH=/path/to/ca.pem + +# ============================================================================ +# Authentication Configuration +# ============================================================================ + +# Authentication mode: none | bearer (default: none) +# - none: No authentication (STDIO only, insecure for HTTP) +# - bearer: Simple bearer token authentication +AUTH_MODE=none + +# ============================================================================ +# Bearer Token Authentication (AUTH_MODE=bearer) +# ============================================================================ + +# Comma-separated list of valid bearer tokens +# Clients must send: Authorization: Bearer +# MCP_BEARER_TOKENS=token1,token2,token3 + +# ============================================================================ +# Credential Mapping (Optional) +# ============================================================================ + +# Map authentication identities to LogicMonitor credentials +# JSON format: {"auth_id": {"account": "lm_account", "token": "lm_token"}} +# +# Credential resolution priority: +# 1. X-LM-Account + X-LM-Bearer-Token headers (highest priority, per-request) +# 2. AUTH_CREDENTIAL_MAPPING (maps bearer token/clientId to LM credentials) +# 3. LM_ACCOUNT + LM_BEARER_TOKEN (default fallback) +# +# Examples: +# - Bearer token mapping: {"token1": {"account": "prod", "token": "xyz"}} +# - Wildcard default: {"*": {"account": "shared", "token": "default"}} +# +# If no match is found, the server falls back to LM_ACCOUNT/LM_BEARER_TOKEN +# when provided. +AUTH_CREDENTIAL_MAPPING={} + +# ============================================================================ +# LogicMonitor Configuration +# ============================================================================ + +# Default LogicMonitor account name +# Used when no credential mapping is configured +LM_ACCOUNT=your-account-name + +# Default LogicMonitor bearer token +# Used when no credential mapping is configured +LM_BEARER_TOKEN=your-bearer-token + +# LogicMonitor API timeout in milliseconds (default: 30000) +LM_API_TIMEOUT_MS=30000 + +# ============================================================================ +# Security Configuration +# ============================================================================ + +# Enable rate limiting (default: false) +# MCP servers typically serve trusted clients (AI assistants, backend services) +# Enable this for public deployments or when serving untrusted clients +# RATE_LIMIT_ENABLED=false + +# Rate limit window in milliseconds (default: 60000 = 1 minute) +# RATE_LIMIT_WINDOW_MS=60000 + +# Maximum requests per window (default: 100) +# RATE_LIMIT_MAX_REQUESTS=100 + +# Session timeout in milliseconds (default: 3600000 = 1 hour) +SESSION_TIMEOUT_MS=3600000 + +# ============================================================================ +# Logging Configuration +# ============================================================================ + +# Log level: error | warn | info | debug (default: info) +LOG_LEVEL=info + +# Log format: json | simple (default: json) +LOG_FORMAT=json + +# Enable audit logging (default: true) +# Logs all MCP tool calls with client identity +AUDIT_LOG_ENABLED=true diff --git a/.gitignore b/.gitignore index c04ca62..bed70cc 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ yarn-error.log* .cursorrules CLAUDE.md DESIGN.md +/docs .npmignore diff --git a/README.md b/README.md index 57855f5..46be0a8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ -[![Test Suite](https://github.com/logicmonitor/lm-api-mcp/actions/workflows/test.yml/badge.svg)](https://github.com/logicmonitor/lm-api-mcp/actions/workflows/test.yml) +[![Test Suite](https://github.com/logicmonitor/logicmonitor-api-mcp/actions/workflows/test.yml/badge.svg)](https://github.com/logicmonitor/logicmonitor-api-mcp/actions/workflows/test.yml) # LogicMonitor MCP Server +> **⚠️ Community Project Disclaimer** +> +> This is an open-source community project and is **not officially supported by LogicMonitor**. While hosted in the LogicMonitor github organization, support is provided on an "as-is" basis through GitHub issues and community contributions. For questions, bug reports, or feature requests, please open an issue on this repository. + A Model Context Protocol (MCP) server that provides secure access to the LogicMonitor API, enabling AI assistants to manage monitoring infrastructure through natural language commands. ## Features @@ -19,7 +23,7 @@ A Model Context Protocol (MCP) server that provides secure access to the LogicMo - All tools now return the full LogicMonitor API payload (`raw`) together with request metadata so downstream agents never lose fields that the API exposes. - When specifying the optional `fields` parameter, only LogicMonitor-supported field names are accepted. Invalid field names trigger a `InvalidParams` error to prevent silent data loss or filtering mistakes. -- Use `*` (or omit `fields`) to request the complete object. The `docs/swagger.json` file shipped with the project contains the authoritative schema for each resource if you need to look up the available fields. +- The `src/schemas/swagger.json` file shipped with the project contains the authoritative schema for each resource if you need to look up the available fields. - Responses always include: - `items` / `device`, etc. – parsed data objects for convenience - `raw` – the exact API payload @@ -38,17 +42,14 @@ npm install -g logicmonitor-api-mcp ```bash # Clone the repository -git clone https://github.com/logicmonitor/lm-api-mcp.git -cd lm-api-mcp +git clone https://github.com/stevevillardi/logicmonitor-api-mcp.git +cd logicmonitor-api-mcp # Install dependencies npm install # Build the project npm run build - -# Optional: Link globally -npm link ``` ## Configuration @@ -85,7 +86,7 @@ If installed from source, use the full path: "mcpServers": { "logicmonitor": { "command": "node", - "args": ["/path/to/lm-api-mcp/dist/index.js", "--stdio"], + "args": ["/path/to/logicmonitor-api-mcp/dist/index.js", "--stdio"], "env": { "LM_ACCOUNT": "your-account-name", "LM_BEARER_TOKEN": "your-bearer-token" @@ -147,9 +148,49 @@ Then connect without credentials in headers: When no `X-LM-*` headers are provided, the server falls back to `LM_ACCOUNT` and `LM_BEARER_TOKEN` environment variables that were set when the process started. +### Authentication + +The server supports two auth modes (`AUTH_MODE`): + +- `none` (default): No MCP client authentication. Only safe for STDIO transport or trusted networks. +- `bearer`: Static bearer token authentication. Clients send `Authorization: Bearer `. + +**LogicMonitor Credentials** are resolved in priority order: +1. **X-LM-Account + X-LM-Bearer-Token headers** (highest priority, per-request override) +2. **AUTH_CREDENTIAL_MAPPING** (maps bearer token/clientId to LM credentials) +3. **LM_ACCOUNT + LM_BEARER_TOKEN** (default fallback) + +**Bearer Token Configuration** +```bash +AUTH_MODE=bearer +MCP_BEARER_TOKENS=token1,token2,token3 + +# Option 1: Use per-request headers (most flexible) +# Clients send X-LM-Account and X-LM-Bearer-Token headers with each request + +# Option 2: Map bearer tokens to LM credentials +AUTH_CREDENTIAL_MAPPING='{"token1":{"account":"prod","token":"lm-xyz"},"token2":{"account":"dev","token":"lm-abc"}}' + +# Option 3: Use default credentials (fallback for all tokens) +LM_ACCOUNT=default-account +LM_BEARER_TOKEN=default-lm-token + +# Wildcard mapping (applies to any token not explicitly mapped) +AUTH_CREDENTIAL_MAPPING='{"*":{"account":"shared","token":"lm-default"}}' +``` + +**Example: Bearer token with per-request credentials** +```bash +curl -H "Authorization: Bearer token1" \ + -H "X-LM-Account: mycompany" \ + -H "X-LM-Bearer-Token: my-lm-token" \ + -H "Content-Type: application/json" \ + https://your-server:3000/mcp +``` + ## Available Tools -The server provides **10 resource-based tools** that handle all CRUD operations through an `operation` parameter: +The server provides **resource-based tools** that handle all CRUD operations through an `operation` parameter: ### Core Resource Tools @@ -231,12 +272,36 @@ Key features: - Flexible time ranges (ISO 8601 dates or Unix epochs, defaults to last 24 hours) - Formatted output with timestamps and metric values -### Session Utilities -- `lm_get_session_context` - View stored variables, last results, and recent history -- `lm_set_session_variable` - Persist custom key/value pairs across tool calls -- `lm_get_session_variable` - Retrieve stored session values -- `lm_clear_session_context` - Reset session state -- `lm_list_session_history` - Inspect recent tool invocations +#### `lm_session` +Manage session context and variables using standard CRUD operations: + +**Operations:** +- **list** - Get session history (recent tool calls) + - Parameters: `limit` (optional, 1-50) +- **get** - Get session context or specific variable + - Parameters: `key` (optional - if omitted, returns full context), `historyLimit`, `includeResults` +- **create** - Store a new session variable + - Parameters: `key` (required), `value` (required) + - Use for storing results for batch operations with applyToPrevious +- **update** - Update an existing session variable + - Parameters: `key` (required), `value` (required) +- **delete** - Clear session data + - Parameters: `scope` (optional: 'variables', 'history', 'results', or 'all') + +**Example Usage:** +```json +// Store devices for batch operations +{ "operation": "create", "key": "myDevices", "value": [...] } + +// Get a stored variable +{ "operation": "get", "key": "myDevices" } + +// View session history +{ "operation": "list", "limit": 10 } + +// Clear all session data +{ "operation": "delete", "scope": "all" } +``` ## Available Prompts diff --git a/SECURITY.md b/SECURITY.md index e18c036..872684d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -15,7 +15,7 @@ We take the security of our software seriously. If you believe you have found a Please follow these steps to report a vulnerability: -1. **Report security vulnerabilities through the public GitHub issues at [https://github.com/LogicMonitor/lm-api-mcp/issues](https://github.com/LogicMonitor/lm-api-mcp/issues).** +1. **Report security vulnerabilities through the public GitHub issues at [https://github.com/LogicMonitor/logicmonitor-api-mcp/issues](https://github.com/LogicMonitor/logicmonitor-api-mcp/issues).** 2. Include the following details: - Description of the vulnerability. - Steps to reproduce. This is incredibly important for us to be able to reproduce your findings. diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 55609f8..d836dac 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -104,7 +104,7 @@ This will generate a detailed report of all packages used in production. ## Reporting Issues If you believe any dependency license information is incorrect or if you have concerns about license compatibility, please open an issue at: -https://github.com/LogicMonitor/lm-api-mcp/issues +https://github.com/LogicMonitor/logicmonitor-api-mcp/issues --- diff --git a/eslint.config.js b/eslint.config.js index 5ab23ca..9aa052a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -41,6 +41,6 @@ export default [ } }, { - ignores: ['dist/**', 'node_modules/**', '*.js', '*.cjs', '*.mjs'] + ignores: ['dist/**', 'node_modules/**', '*.js', '*.cjs', '*.mjs', 'src/schemas/generated/**'] } ]; \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 0b32e62..0889e15 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,12 +11,15 @@ export default { { useESM: true, tsconfig: { + target: 'ES2022', module: 'ESNext', moduleResolution: 'node', esModuleInterop: true, + resolveJsonModule: true, rootDir: '.', strict: false, }, + diagnostics: false, }, ], }, diff --git a/orval.config.ts b/orval.config.ts new file mode 100644 index 0000000..dbae7dd --- /dev/null +++ b/orval.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'orval'; + +export default defineConfig({ + logicmonitor: { + input: './src/schemas/swagger.json', + output: { + target: './src/schemas/generated/logicmonitorSwaggerSchema.ts', + client: 'zod', + mode: 'single', + clean: true, + }, + }, +}); + diff --git a/package-lock.json b/package-lock.json index e431a84..c95501f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,41 +9,42 @@ "version": "2.0.0", "license": "MPL-2.0", "dependencies": { - "@modelcontextprotocol/sdk": "^1.20.2", - "@types/jest": "^30.0.0", - "axios": "^1.9.0", - "dotenv": "^17.2.3", - "express": "^5.1.0", - "helmet": "^8.1.0", - "joi": "^18.0.2", - "ts-jest": "^29.4.5", - "typescript-eslint": "^8.47.0", - "winston": "^3.17.0" + "@modelcontextprotocol/sdk": "^1.26.0", + "axios": "^1.13.5", + "dotenv": "^17.3.1", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "winston": "^3.19.0", + "zod": "^4.3.6" }, "bin": { "logicmonitor-api-mcp": "dist/index.js" }, "devDependencies": { - "@types/express": "^5.0.2", - "@types/node": "^24.10.1", - "@typescript-eslint/eslint-plugin": "^8.32.1", - "@typescript-eslint/parser": "^8.32.1", - "eslint": "^9.39.1", + "@types/express": "^5.0.6", + "@types/jest": "^30.0.0", + "@types/node": "^25.2.3", + "@typescript-eslint/eslint-plugin": "^8.56.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^10.0.0", "jest": "^30.2.0", - "tsx": "^4.19.4", - "typescript": "^5.8.3" + "orval": "^8.4.0", + "ts-jest": "^29.4.6", + "tsx": "^4.21.0", + "typescript": "^5.9.3" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -52,29 +53,31 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -94,19 +97,21 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -116,12 +121,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -135,6 +141,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -144,33 +151,36 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -180,9 +190,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -192,6 +203,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -201,6 +213,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -210,31 +223,34 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -247,6 +263,7 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -259,6 +276,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -271,6 +289,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -283,6 +302,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -295,12 +315,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -313,6 +334,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -325,6 +347,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -334,12 +357,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -352,6 +376,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -364,6 +389,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -376,6 +402,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -388,6 +415,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -400,6 +428,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -412,6 +441,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -424,6 +454,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -439,6 +470,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -451,12 +483,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -466,31 +499,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -498,9 +533,10 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -514,6 +550,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, "license": "MIT" }, "node_modules/@colors/colors": { @@ -525,6 +562,16 @@ "node": ">=0.1.90" } }, + "node_modules/@commander-js/extra-typings": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-14.0.0.tgz", + "integrity": "sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "commander": "~14.0.0" + } + }, "node_modules/@dabh/diagnostics": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", @@ -537,9 +584,10 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -548,9 +596,10 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -561,6 +610,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -568,9 +618,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -585,9 +635,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -602,9 +652,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -619,9 +669,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -636,9 +686,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -653,9 +703,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -670,9 +720,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -687,9 +737,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -704,9 +754,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -721,9 +771,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -738,9 +788,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -755,9 +805,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -772,9 +822,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -789,9 +839,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -806,9 +856,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -823,9 +873,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -840,9 +890,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -857,9 +907,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -874,9 +924,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -891,9 +941,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -908,9 +958,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -925,9 +975,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -942,9 +992,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -959,9 +1009,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -976,9 +1026,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -993,9 +1043,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -1010,9 +1060,10 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -1031,233 +1082,176 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.1.tgz", + "integrity": "sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.7", + "@eslint/object-schema": "^3.0.1", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^10.1.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/@eslint/config-array/node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "license": "Apache-2.0", + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", + "dev": true, + "license": "MIT", "dependencies": { - "@eslint/core": "^0.17.0" + "jackspeak": "^4.2.3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "20 || >=22" } }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "license": "Apache-2.0", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15" + "balanced-match": "^4.0.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "20 || >=22" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "license": "MIT", + "node_modules/@eslint/config-array/node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@isaacs/cliui": "^9.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "20 || >=22" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", + "node_modules/@eslint/config-helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.2.tgz", + "integrity": "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", + "@eslint/core": "^1.1.0" + }, "engines": { - "node": ">= 4" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/@eslint/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", + "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.1.tgz", + "integrity": "sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz", + "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0", + "@eslint/core": "^1.1.0", "levn": "^0.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@hapi/address": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", - "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", - "license": "BSD-3-Clause", + "node_modules/@gerrit0/mini-shiki": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.22.0.tgz", + "integrity": "sha512-jMpciqEVUBKE1QwU64S4saNMzpsSza6diNCk4MWAeCxO2+LFi2FIFmL2S0VDLzEJCxuvCbU783xi8Hp/gkM5CQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@hapi/hoek": "^11.0.2" - }, - "engines": { - "node": ">=14.0.0" + "@shikijs/engine-oniguruma": "^3.22.0", + "@shikijs/langs": "^3.22.0", + "@shikijs/themes": "^3.22.0", + "@shikijs/types": "^3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@hapi/formula": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", - "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/hoek": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", - "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/pinpoint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", - "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/tlds": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", - "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", - "license": "BSD-3-Clause", + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "license": "MIT", "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@hapi/topo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", - "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^11.0.2" + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" } }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18.0" @@ -1267,6 +1261,7 @@ "version": "0.16.7", "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", @@ -1280,6 +1275,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" @@ -1293,6 +1289,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18" @@ -1306,6 +1303,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1323,6 +1321,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -1335,19 +1334,11 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -1357,23 +1348,11 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -1386,6 +1365,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -1401,6 +1381,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -1409,19 +1390,11 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1431,6 +1404,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -1448,6 +1422,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -1495,6 +1470,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1504,6 +1480,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "dev": true, "license": "MIT", "dependencies": { "@jest/fake-timers": "30.2.0", @@ -1519,6 +1496,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "dev": true, "license": "MIT", "dependencies": { "expect": "30.2.0", @@ -1532,6 +1510,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0" @@ -1544,6 +1523,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -1561,6 +1541,7 @@ "version": "30.1.0", "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1570,6 +1551,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -1585,6 +1567,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -1598,6 +1581,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", @@ -1640,6 +1624,7 @@ "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.34.0" @@ -1652,6 +1637,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -1667,6 +1653,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -1681,6 +1668,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -1696,6 +1684,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "30.2.0", @@ -1711,6 +1700,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -1737,6 +1727,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/pattern": "30.0.1", @@ -1755,6 +1746,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -1765,6 +1757,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1775,6 +1768,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1784,12 +1778,14 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1797,11 +1793,12 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.22.0.tgz", - "integrity": "sha512-VUpl106XVTCpDmTBil2ehgJZjhyLY2QZikzF8NvTXtLRF1CvO5iEE2UNZdVIUer35vFOwMKYeUGbjJtvPWan3g==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", "license": "MIT", "dependencies": { + "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -1809,41 +1806,37 @@ "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@cfworker/json-schema": "^4.1.1" + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { "@cfworker/json-schema": { "optional": true + }, + "zod": { + "optional": false } } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1856,6 +1849,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -1869,6 +1863,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -1878,6 +1873,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1887,10 +1883,168 @@ "node": ">= 8" } }, + "node_modules/@orval/angular": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/angular/-/angular-8.4.0.tgz", + "integrity": "sha512-VrqVO1ibZGoxrvHuVIWQ7vHqjQJmGxxJP+xlLK2tJCQW/DKelelQ4wyR0wkpldO8DCwInA8xqLreKWcnqqnvNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0" + } + }, + "node_modules/@orval/axios": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/axios/-/axios-8.4.0.tgz", + "integrity": "sha512-Z//byJbrsE0t+axC4QUrKaq7iMiroPtEF3jtOH/mwQPOz4fE32nSGUg0wKu9iaxRfZEbx/7DHW5i+EfJSK5g/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0" + } + }, + "node_modules/@orval/core": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/core/-/core-8.4.0.tgz", + "integrity": "sha512-w9C7A2Ognr+EU81+D5ZZK5hHFmGydDcViHfDFbkh8rNH0/XBsO19sPBtKKzEmI/ZoV16/7MctdElLRafSllDBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/openapi-types": "0.5.3", + "acorn": "^8.15.0", + "chalk": "^5.6.2", + "compare-versions": "^6.1.1", + "debug": "^4.4.3", + "esbuild": "^0.27.2", + "esutils": "2.0.3", + "fs-extra": "^11.3.2", + "globby": "16.1.0", + "remeda": "^2.32.0", + "typedoc": "^0.28.15" + } + }, + "node_modules/@orval/core/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@orval/fetch": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/fetch/-/fetch-8.4.0.tgz", + "integrity": "sha512-Q3BRy3KmxOGOgRoteixQB3gUt4r/pJrvrgY6hFj+1QFcp2Aig6L83G2Rg2FU/pPa1nF7slaqhdPoEGjDiRyzAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "@scalar/openapi-types": "0.5.3" + } + }, + "node_modules/@orval/hono": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/hono/-/hono-8.4.0.tgz", + "integrity": "sha512-uhMQ0jV/eP6MqNudr/3m9YzPoT4AW+zQ5F72fk9xlSNTBMCDgGo4dwv6Hb4KGC7oRl2RfJXDXe8Qt/kGy6ptxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "@orval/zod": "8.4.0", + "fs-extra": "^11.3.2", + "remeda": "^2.32.0" + } + }, + "node_modules/@orval/mcp": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/mcp/-/mcp-8.4.0.tgz", + "integrity": "sha512-ZEQ7SO9Lx+kJzLd4F6NlFlBMAvY1Zo8qRJrN4W3PSbfLel67XJolrWcekNnLwdd/4vP9UtgjmpOB6MI8FlCxxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "@orval/fetch": "8.4.0", + "@orval/zod": "8.4.0" + } + }, + "node_modules/@orval/mock": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/mock/-/mock-8.4.0.tgz", + "integrity": "sha512-jRXSlN5SEHw8TQtO5iCEb8iwvneOlcLQun4FduGGd0xjvBYwh3uZ2mEeSdkdYw1hcWPg+PH1x4KX3zvofIbvdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0" + } + }, + "node_modules/@orval/query": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/query/-/query-8.4.0.tgz", + "integrity": "sha512-AL/QgwEL775xYxYsd9PASXM0IQOffE+yhJa5FZrSyr2y4Ee1blA/UskekPaBubUjx4I80KVfpsJ+Pr+U/ZT5Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "@orval/fetch": "8.4.0", + "chalk": "^5.6.2", + "remeda": "^2.32.0" + } + }, + "node_modules/@orval/query/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@orval/solid-start": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/solid-start/-/solid-start-8.4.0.tgz", + "integrity": "sha512-ki0sqocaRDOHQcoy2YqDxZEgD0Y5LzWjkrAjO9dZ5tQ93B2Wl76mfHzWyBXMVk3Np7TgvqlnnyzCfhfkpx35ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0" + } + }, + "node_modules/@orval/swr": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/swr/-/swr-8.4.0.tgz", + "integrity": "sha512-O7mPzum5v4maJGEc3RgS9FeaWqOXRODQJcQM4NWypAFS9UxlzSeVZKRm5zavWRbIQs4Qk0iawOQwKzmPzPJADg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "@orval/fetch": "8.4.0" + } + }, + "node_modules/@orval/zod": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@orval/zod/-/zod-8.4.0.tgz", + "integrity": "sha512-Hcbzu8u4M5bXRR/n9qsiwTF0J/+42xiNykFnpWStP7udZqas/dQo2o4UVvaNIJ0LtJLfpTVQUW0StmTgRKP6Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.4.0", + "remeda": "^2.32.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -1901,6 +2055,7 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1909,16 +2064,195 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@scalar/helpers": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.6.tgz", + "integrity": "sha512-A471YFBCj7ZOlGIkAYnU8oYgeyts82ZNX+4UicrlmKv3eAQ+kwboN3Dy0R6u1lcA/+I/zzeXi/fBObsT7P9qTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/json-magic": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.8.10.tgz", + "integrity": "sha512-TWdKQ/hcy4erFQDp2MVlFoPesFep2VY96Q69cjLHmx5hxM0ZUBfmNB4lA8Uh3klgx5JmCDfSNIGjPFIpxlosUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/helpers": "0.2.6", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.23.13.tgz", + "integrity": "sha512-YsljPOKOgQgZL/kBcEouwz2CUa+2hFfThlUZRWC2DFI2Fnw5Ur8F1IvGgPqCAHr9p2XMH+Z/Pag2jZUfLcxcww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/json-magic": "0.9.0", + "@scalar/openapi-types": "0.5.3", + "@scalar/openapi-upgrader": "0.1.7", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^3.0.1", + "jsonpointer": "^5.0.1", + "leven": "^4.0.0", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/@scalar/helpers": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.7.tgz", + "integrity": "sha512-uFTcdi3XYDDuaJLWiMuM3ijQit1OBw7AkuOuujReY8L9UmUQHY56erYg0+Db3llTsinuIYFh+eS/WX/sYuevYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/@scalar/json-magic": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.9.0.tgz", + "integrity": "sha512-aSWd8rd3O73Ak9Ylson2TywvOuTjjOYiXydl9Cn8Ip/r7fi+h0QqAGom5gqo/WewrhySF9v+H/sW/Qmd05T/Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/helpers": "0.2.7", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/leven": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-4.1.0.tgz", + "integrity": "sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@scalar/openapi-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.5.3.tgz", + "integrity": "sha512-m4n/Su3K01d15dmdWO1LlqecdSPKuNjuokrJLdiQ485kW/hRHbXW1QP6tJL75myhw/XhX5YhYAR+jrwnGjXiMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.1.11" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-upgrader": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.1.7.tgz", + "integrity": "sha512-065froUtqvaHjyeJtyitf8tb+k7oh7nU0OinAHYbj1Bqgwb1s2+uKMqHYHEES5CNpp+2xtL4lxup6Aq29yW+sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/openapi-types": "0.5.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", + "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", + "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", + "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" @@ -1928,6 +2262,7 @@ "version": "13.0.5", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" @@ -1943,16 +2278,11 @@ "text-hex": "1.0.x" } }, - "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", - "license": "MIT" - }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1963,6 +2293,7 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -1976,6 +2307,7 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -1985,6 +2317,7 @@ "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -1995,6 +2328,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.28.2" @@ -2021,28 +2355,36 @@ "@types/node": "*" } }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", - "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^1" + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", - "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "license": "MIT", "dependencies": { @@ -2052,6 +2394,16 @@ "@types/send": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -2063,12 +2415,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -2078,6 +2432,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -2087,6 +2442,7 @@ "version": "30.0.0", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, "license": "MIT", "dependencies": { "expect": "^30.0.0", @@ -2097,19 +2453,14 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -2140,25 +2491,13 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -2166,6 +2505,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, "license": "MIT" }, "node_modules/@types/triple-beam": { @@ -2174,10 +2514,18 @@ "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -2187,23 +2535,24 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", - "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/type-utils": "8.47.0", - "@typescript-eslint/utils": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2213,22 +2562,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.47.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", - "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2238,19 +2588,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", - "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.47.0", - "@typescript-eslint/types": "^8.47.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2264,13 +2615,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", - "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2281,9 +2633,10 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", - "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", + "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2297,16 +2650,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", - "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/utils": "8.47.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2316,14 +2670,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", - "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", + "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2334,21 +2689,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", - "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.47.0", - "@typescript-eslint/tsconfig-utils": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2362,15 +2717,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", - "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", + "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2380,18 +2736,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", - "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2402,12 +2759,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2417,6 +2775,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { @@ -2426,6 +2785,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2439,6 +2799,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2452,6 +2813,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2465,6 +2827,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2478,6 +2841,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2491,6 +2855,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2504,6 +2869,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2517,6 +2883,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2530,6 +2897,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2543,6 +2911,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2556,6 +2925,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2569,6 +2939,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2582,6 +2953,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2595,6 +2967,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2608,6 +2981,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2621,6 +2995,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -2637,6 +3012,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2650,6 +3026,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2663,6 +3040,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2686,6 +3064,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -2698,15 +3077,16 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2719,6 +3099,21 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/ajv-formats": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", @@ -2736,10 +3131,21 @@ } } }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -2755,6 +3161,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2767,6 +3174,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2782,6 +3190,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -2792,10 +3201,14 @@ } }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/async": { "version": "3.2.6", @@ -2810,13 +3223,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -2824,6 +3237,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/transform": "30.2.0", @@ -2845,6 +3259,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, "license": "BSD-3-Clause", "workspaces": [ "test/babel-8" @@ -2864,6 +3279,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "dev": true, "license": "MIT", "dependencies": { "@types/babel__core": "^7.20.5" @@ -2876,6 +3292,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -2902,6 +3319,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "dev": true, "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "30.2.0", @@ -2918,41 +3336,48 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2962,6 +3387,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2971,9 +3397,10 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2990,11 +3417,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -3007,6 +3434,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" @@ -3019,6 +3447,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -3028,6 +3457,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/bytes": { @@ -3072,6 +3502,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3081,15 +3512,17 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001756", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", - "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3110,6 +3543,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3126,15 +3560,33 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, "funding": [ { "type": "github", @@ -3147,15 +3599,17 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", - "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -3170,6 +3624,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3179,12 +3634,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -3199,6 +3656,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -3211,6 +3669,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -3228,6 +3687,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -3238,6 +3698,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, "license": "MIT" }, "node_modules/color": { @@ -3257,6 +3718,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3269,6 +3731,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/color-string": { @@ -3325,10 +3788,28 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, "node_modules/content-disposition": { @@ -3357,6 +3838,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/cookie": { @@ -3378,9 +3860,9 @@ } }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -3388,6 +3870,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cross-spawn": { @@ -3422,9 +3908,10 @@ } }, "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -3439,12 +3926,14 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3472,15 +3961,16 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -3507,6 +3997,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ee-first": { @@ -3516,15 +4007,17 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.257", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.257.tgz", - "integrity": "sha512-VNSOB6JZan5IQNMqaurYpZC4bDPXcvKlUwVD/ztMeVD7SwOpMYGOY7dgt+4lNiIHIpvv/FdULnZKqKEy2KcuHQ==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3537,6 +4030,7 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/enabled": { @@ -3554,10 +4048,61 @@ "node": ">= 0.8" } }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -3609,9 +4154,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3622,38 +4167,39 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3669,6 +4215,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3678,32 +4225,30 @@ } }, "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.0.tgz", + "integrity": "sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg==", + "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.0", + "@eslint/config-helpers": "^0.5.2", + "@eslint/core": "^1.1.0", + "@eslint/plugin-kit": "^0.6.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", - "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", + "eslint-scope": "^9.1.0", + "eslint-visitor-keys": "^5.0.0", + "espree": "^11.1.0", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", @@ -3713,8 +4258,7 @@ "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.1.1", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -3722,7 +4266,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://eslint.org/donate" @@ -3737,16 +4281,19 @@ } }, "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.0.tgz", + "integrity": "sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3756,6 +4303,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3764,10 +4312,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3780,23 +4339,40 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jackspeak": "^4.2.3" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3806,53 +4382,77 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/eslint/node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.1.0.tgz", + "integrity": "sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3862,6 +4462,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -3872,9 +4473,10 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -3887,6 +4489,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -3899,6 +4502,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -3908,6 +4512,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3922,6 +4527,18 @@ "node": ">= 0.6" } }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/eventsource-parser": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", @@ -3935,6 +4552,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -3958,12 +4576,14 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/exit-x": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -3973,6 +4593,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/expect-utils": "30.2.0", @@ -3987,18 +4608,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -4029,10 +4651,13 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", + "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", "license": "MIT", + "dependencies": { + "ip-address": "10.0.1" + }, "engines": { "node": ">= 16" }, @@ -4053,6 +4678,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4069,6 +4695,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -4081,12 +4708,14 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fast-uri": { @@ -4106,9 +4735,10 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -4118,6 +4748,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" @@ -4129,10 +4760,27 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "license": "MIT" }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" @@ -4145,6 +4793,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -4154,9 +4803,9 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -4167,13 +4816,18 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -4190,6 +4844,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -4203,6 +4858,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, "license": "ISC" }, "node_modules/fn.name": { @@ -4235,6 +4891,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -4302,16 +4959,33 @@ "node": ">= 0.8" } }, + "node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -4335,6 +5009,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -4344,6 +5019,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -4377,6 +5053,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -4399,6 +5076,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4408,9 +5086,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", "dev": true, "license": "MIT", "dependencies": { @@ -4424,6 +5102,8 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -4444,6 +5124,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -4452,13 +5133,35 @@ "node": ">=10.13.0" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/globby": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", + "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4480,18 +5183,14 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT" - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -4513,6 +5212,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4557,96 +5257,83 @@ "node": ">= 0.4" } }, - "node_modules/helmet": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", - "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==", + "node_modules/hono": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.9.tgz", + "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==", "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=16.9.0" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", @@ -4666,6 +5353,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -4676,6 +5364,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -4688,6 +5377,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -4701,12 +5399,14 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, "license": "MIT" }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4716,6 +5416,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4725,6 +5426,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4734,6 +5436,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4746,11 +5449,38 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", @@ -4769,6 +5499,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4779,6 +5522,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -4788,6 +5532,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", @@ -4804,6 +5549,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -4818,6 +5564,7 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", @@ -4832,6 +5579,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -4845,6 +5593,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -4860,6 +5609,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "30.2.0", @@ -4886,6 +5636,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", @@ -4900,6 +5651,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -4931,6 +5683,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "30.2.0", @@ -4963,6 +5716,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -5014,6 +5768,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", @@ -5029,6 +5784,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "dev": true, "license": "MIT", "dependencies": { "detect-newline": "^3.1.0" @@ -5041,6 +5797,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -5057,6 +5814,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -5075,6 +5833,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -5099,6 +5858,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -5112,6 +5872,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -5127,6 +5888,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -5147,6 +5909,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -5161,6 +5924,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5178,6 +5942,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5187,6 +5952,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -5206,6 +5972,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", + "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", @@ -5219,6 +5986,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -5252,6 +6020,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -5285,6 +6054,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -5317,6 +6087,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -5334,6 +6105,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5346,6 +6118,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -5363,6 +6136,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -5375,6 +6149,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "30.2.0", @@ -5394,6 +6169,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -5410,6 +6186,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5421,37 +6198,41 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/joi": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.2.tgz", - "integrity": "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/address": "^5.1.1", - "@hapi/formula": "^3.0.2", - "@hapi/hoek": "^11.0.7", - "@hapi/pinpoint": "^2.0.1", - "@hapi/tlds": "^1.1.1", - "@hapi/topo": "^6.0.2", - "@standard-schema/spec": "^1.0.0" - }, - "engines": { - "node": ">= 20" + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -5461,6 +6242,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -5473,12 +6255,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -5487,16 +6271,24 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -5505,10 +6297,34 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -5524,6 +6340,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5533,6 +6350,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -5546,12 +6364,24 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, "license": "MIT" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -5567,12 +6397,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, "license": "MIT" }, "node_modules/logform": { @@ -5596,15 +6421,24 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" @@ -5620,17 +6454,44 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -5640,6 +6501,13 @@ "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -5665,12 +6533,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -5680,6 +6550,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -5699,21 +6570,26 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5723,6 +6599,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -5738,6 +6615,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5747,6 +6625,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -5762,6 +6641,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, "license": "MIT", "bin": { "napi-postinstall": "lib/cli.js" @@ -5777,6 +6657,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, "license": "MIT" }, "node_modules/negotiator": { @@ -5792,24 +6673,28 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, "license": "MIT" }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5819,6 +6704,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -5882,6 +6768,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -5897,6 +6784,7 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -5910,10 +6798,290 @@ "node": ">= 0.8.0" } }, + "node_modules/orval": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/orval/-/orval-8.4.0.tgz", + "integrity": "sha512-2m05HBhAnYbaVSg+9j4iznETv22Ud4q6NHP7CvtjHKjEc9oOyevCrbDaKskRgpYpLhFrLcQVcZ7Y7hKUpvV3jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commander-js/extra-typings": "^14.0.0", + "@orval/angular": "8.4.0", + "@orval/axios": "8.4.0", + "@orval/core": "8.4.0", + "@orval/fetch": "8.4.0", + "@orval/hono": "8.4.0", + "@orval/mcp": "8.4.0", + "@orval/mock": "8.4.0", + "@orval/query": "8.4.0", + "@orval/solid-start": "8.4.0", + "@orval/swr": "8.4.0", + "@orval/zod": "8.4.0", + "@scalar/json-magic": "^0.8.8", + "@scalar/openapi-parser": "^0.23.9", + "@scalar/openapi-types": "0.5.3", + "chalk": "^5.6.2", + "chokidar": "^5.0.0", + "commander": "^14.0.2", + "enquirer": "^2.4.1", + "execa": "^9.6.1", + "find-up": "8.0.0", + "fs-extra": "^11.3.2", + "jiti": "^2.6.1", + "js-yaml": "4.1.1", + "remeda": "^2.32.0", + "string-argv": "^0.3.2", + "tsconfck": "^3.1.6", + "typedoc": "^0.28.15", + "typedoc-plugin-coverage": "^4.0.2", + "typedoc-plugin-markdown": "^4.9.0" + }, + "bin": { + "orval": "dist/bin/orval.mjs" + }, + "engines": { + "node": ">=22.18.0" + } + }, + "node_modules/orval/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/orval/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/orval/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/orval/node_modules/find-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", + "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^8.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/orval/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/orval/node_modules/locate-path": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", + "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -5929,6 +7097,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -5944,6 +7113,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5953,24 +7123,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -5985,6 +7145,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -5998,6 +7171,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6007,6 +7181,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6025,6 +7200,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -6041,6 +7217,7 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, "license": "ISC" }, "node_modules/path-to-regexp": { @@ -6057,12 +7234,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -6075,15 +7254,16 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -6093,6 +7273,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -6105,6 +7286,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -6118,6 +7300,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -6130,6 +7313,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -6145,6 +7329,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -6157,6 +7342,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -6166,6 +7352,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "30.0.5", @@ -6180,6 +7367,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6188,6 +7376,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6207,10 +7411,21 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/punycode": { + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6220,6 +7435,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, "funding": [ { "type": "individual", @@ -6233,9 +7449,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -6251,6 +7467,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -6277,40 +7494,25 @@ } }, "node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, "license": "MIT" }, "node_modules/readable-stream": { @@ -6327,10 +7529,35 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/remeda": { + "version": "2.33.6", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.6.tgz", + "integrity": "sha512-tazDGH7s75kUPGBKLvhgBEHMgW+TdDFhjUAMdQj57IoWz6HsGa5D2RX5yDUz6IIqiRRvZiaEHzCzWdTeixc/Kg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remeda" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6349,6 +7576,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" @@ -6357,24 +7585,16 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -6389,6 +7609,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -6415,6 +7636,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -6470,9 +7692,10 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6482,31 +7705,35 @@ } }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -6516,6 +7743,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -6621,6 +7852,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -6633,6 +7865,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6642,6 +7875,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -6651,6 +7885,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -6661,6 +7896,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/stack-trace": { @@ -6676,6 +7912,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -6688,6 +7925,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6711,10 +7949,21 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "license": "MIT", "dependencies": { "char-regex": "^1.0.2", @@ -6728,6 +7977,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6737,6 +7987,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6749,6 +8000,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -6767,6 +8019,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6781,6 +8034,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6790,12 +8044,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6808,6 +8064,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -6824,6 +8081,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6836,6 +8094,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6845,6 +8104,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6854,6 +8114,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6863,6 +8124,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6875,6 +8137,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -6884,9 +8147,10 @@ } }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, "license": "MIT", "dependencies": { "@pkgr/core": "^0.2.9" @@ -6902,6 +8166,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -6916,6 +8181,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6926,7 +8192,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -6947,6 +8214,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6961,16 +8229,66 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -6998,9 +8316,10 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18.12" @@ -7010,9 +8329,10 @@ } }, "node_modules/ts-jest": { - "version": "29.4.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", - "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", + "version": "29.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", + "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", + "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", @@ -7065,6 +8385,7 @@ "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -7073,21 +8394,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "dev": true, + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD", "optional": true }, "node_modules/tsx": { - "version": "4.20.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", - "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.25.0", + "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -7104,6 +8447,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -7116,6 +8460,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7125,6 +8470,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -7147,10 +8493,61 @@ "node": ">= 0.6" } }, + "node_modules/typedoc": { + "version": "0.28.17", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.17.tgz", + "integrity": "sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^3.17.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.8.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18", + "pnpm": ">= 10" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" + } + }, + "node_modules/typedoc-plugin-coverage": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-coverage/-/typedoc-plugin-coverage-4.0.2.tgz", + "integrity": "sha512-mfn0e7NCqB8x2PfvhXrtmd7KWlsNf1+B2N9y8gR/jexXBLrXl/0e+b2HdG5HaTXGi7i0t2pyQY2VRmq7gtdEHQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.28.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.10.0.tgz", + "integrity": "sha512-psrg8Rtnv4HPWCsoxId+MzEN8TVK5jeKCnTbnGAbTBqcDapR9hM41bJT/9eAyKn9C2MDG9Qjh3MkltAYuLDoXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.28.x" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -7160,33 +8557,18 @@ "node": ">=14.17" } }, - "node_modules/typescript-eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz", - "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.47.0", - "@typescript-eslint/parser": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/utils": "8.47.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, "license": "BSD-2-Clause", "optional": true, "bin": { @@ -7200,8 +8582,32 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -7215,6 +8621,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -7246,9 +8653,10 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, "funding": [ { "type": "opencollective", @@ -7279,6 +8687,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -7294,6 +8703,7 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -7317,6 +8727,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -7338,9 +8749,9 @@ } }, "node_modules/winston": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", - "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", @@ -7377,6 +8788,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7386,12 +8798,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -7410,6 +8824,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -7427,6 +8842,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7436,12 +8852,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -7456,6 +8874,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -7468,6 +8887,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -7486,6 +8906,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -7499,6 +8920,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -7508,12 +8930,30 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -7532,6 +8972,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -7541,6 +8982,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7550,12 +8992,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -7570,6 +9014,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -7582,6 +9027,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -7590,19 +9036,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", - "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", "license": "ISC", "peerDependencies": { "zod": "^3.25 || ^4" diff --git a/package.json b/package.json index 49eacbd..c35b0c2 100644 --- a/package.json +++ b/package.json @@ -13,14 +13,8 @@ "build": "tsc", "start": "node dist/index.js", "inspector": "npx @modelcontextprotocol/inspector node dist/index.js", + "generate:schemas": "orval", "test": "NODE_OPTIONS=--experimental-vm-modules jest", - "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch", - "test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage", - "test:integration": "NODE_OPTIONS=--experimental-vm-modules jest --testPathPattern=tests/tools", - "test:client": "node tests/test-client.js", - "test:headers": "node tests/test-headers.js", - "test:session": "node tests/test-session.js", - "test:filters": "node tests/test-filters.js", "lint": "eslint src --ext .ts" }, "keywords": [ @@ -37,12 +31,12 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "git+https://github.com/LogicMonitor/lm-api-mcp.git" + "url": "git+https://github.com/LogicMonitor/logicmonitor-api-mcp.git" }, "bugs": { - "url": "https://github.com/LogicMonitor/lm-api-mcp/issues" + "url": "https://github.com/LogicMonitor/logicmonitor-api-mcp/issues" }, - "homepage": "https://github.com/LogicMonitor/lm-api-mcp#readme", + "homepage": "https://github.com/LogicMonitor/logicmonitor-api-mcp#readme", "engines": { "node": ">=18.0.0" }, @@ -53,25 +47,25 @@ "examples/**/*" ], "dependencies": { - "@modelcontextprotocol/sdk": "^1.20.2", - "@types/jest": "^30.0.0", - "axios": "^1.9.0", - "dotenv": "^17.2.3", - "express": "^5.1.0", - "helmet": "^8.1.0", - "joi": "^18.0.2", - "ts-jest": "^29.4.5", - "typescript-eslint": "^8.47.0", - "winston": "^3.17.0" + "@modelcontextprotocol/sdk": "^1.26.0", + "axios": "^1.13.5", + "dotenv": "^17.3.1", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "winston": "^3.19.0", + "zod": "^4.3.6" }, "devDependencies": { - "@types/express": "^5.0.2", - "@types/node": "^24.10.1", - "@typescript-eslint/eslint-plugin": "^8.32.1", - "@typescript-eslint/parser": "^8.32.1", - "eslint": "^9.39.1", + "@types/express": "^5.0.6", + "@types/jest": "^30.0.0", + "@types/node": "^25.2.3", + "@typescript-eslint/eslint-plugin": "^8.56.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^10.0.0", "jest": "^30.2.0", - "tsx": "^4.19.4", - "typescript": "^5.8.3" + "orval": "^8.4.0", + "ts-jest": "^29.4.6", + "tsx": "^4.21.0", + "typescript": "^5.9.3" } } diff --git a/releasenotes.md b/releasenotes.md index 7675b5b..fb3d9cf 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,10 +1,106 @@ -# LogicMonitor MCP Server v1.2.0 +# LogicMonitor MCP Server v2.0.0 + +## Major Release - Complete Architecture Modernization + +Version 2.0 represents a complete rewrite of the LogicMonitor MCP Server with modern validation, improved type safety, and expanded resource coverage. ## Highlights -- **Smarter agent experience** – the server now advertises field metadata resources so assistants can discover valid fields for each LogicMonitor resource before making a call. -- **Cleaner, richer responses** – every tool returns the full LogicMonitor payload along with request metadata, making conversational workflows align with direct API usage. -- **Consistent batching** – shared diagnostics and error handling across all batch-capable tools ensure LogicMonitor status codes and request IDs are surfaced uniformly. -- **Session intelligence** – new session helpers let agents store variables, inspect history, and maintain context across steps. -- **Health telemetry** – per-tool success/failure metrics are exposed via `health://logicmonitor/status` for easier monitoring. -- **Docs & validation upgrades** – clearer instructions, better runtime validation, and improved error messages reduce guesswork for anyone using the tools. \ No newline at end of file +### New Resource Coverage +- **Device Data** – Query datasources, instances, and performance metrics for devices +- **Collector Groups** – Full CRUD operations for organizing collectors +- **Dashboards** – Create, update, and manage LogicMonitor dashboards +- **Users** – Complete user management with role assignments and batch operations + +### Architecture Improvements + +- **Modern Validation with Zod** – Migrated from Joi to Zod for compile-time type safety and better error messages. All schemas now use discriminated unions for operation-specific validation with complex conditional logic via `superRefine`. + +- **MCP SDK High-Level API** – All tools now use the recommended `registerTool()` API instead of manual `setRequestHandler()`, providing better integration with MCP clients and automatic schema handling. + +- **Unified Resource Pattern** – Every tool now follows a consistent pattern with 5 core operations: + - `list` – Retrieve resources with filtering, pagination, and field selection + - `get` – Fetch individual resources by ID + - `create` – Create single or batch resources + - `update` – Update resources (single, batch arrays, or filter-based) + - `delete` – Delete resources with batch support + +- **Enhanced Batch Operations** – All tools support three batch modes: + - Explicit arrays (e.g., `devices: [...]`) + - Session variable references (`applyToPrevious: "lastDeviceList"`) + - Filter-based operations (`filter: "hostStatus:dead"`) + +- **Smart Pagination Control** – New `autoPaginate` parameter allows fine-grained control over result sets. Set to `false` to respect `size` limits, or `true` (default) to automatically fetch all pages. + +- **Type-Safe Schemas** – Full TypeScript inference from Zod schemas to handlers, eliminating runtime type mismatches and providing better IDE autocomplete. + +### Developer Experience + +- **Cleaner Codebase** – Removed ~2,000 lines of deprecated code (Joi schemas, legacy tool definitions). All validation now uses a single source of truth per resource. + +- **Consistent Error Handling** – Standardized MCP error codes and validation messages across all tools with detailed path information for debugging. + +- **Better Testing** – Comprehensive test suite with 170+ tests covering CRUD operations, batch processing, field selection, and error handling for all 11 tools. + +### Resource Health & Discovery + +- **Field Metadata Resources** – Assistants can discover valid fields via `health://logicmonitor/fields/{resource}` before making API calls. + +- **Health Telemetry** – Per-tool success/failure metrics exposed via `health://logicmonitor/status` for monitoring. + +- **Session Management** – Enhanced session tool for storing variables, inspecting history, and maintaining context across multi-step workflows. + +## Complete Tool List + +All 11 tools now support the unified resource pattern: + +1. **lm_device** – Device management with custom properties and host groups +2. **lm_device_group** – Device group hierarchy and dynamic membership +3. **lm_device_data** – Performance metrics, datasources, and instances +4. **lm_alert** – Alert management (list, get, update for ack/note/escalate) +5. **lm_collector** – Collector discovery and monitoring +6. **lm_collector_group** – Collector group organization +7. **lm_website** – Website monitoring (webcheck/pingcheck) +8. **lm_website_group** – Website group management +9. **lm_dashboard** – Dashboard creation and management +10. **lm_user** – User management with role assignments +11. **lm_session** – Session state, variables, and operation history + +## Breaking Changes/Fixes + +- **Tool Input Schema Changes** – All tools now use `operation` parameter with values like `list`, `get`, `create`, `update`, `delete` instead of separate tools per operation. + +- **Validation Library Change** – Switched from Joi to Zod. Custom validation logic may need updates if extending the server. + +- **Field Selection** – To request all fields, omit the `fields` parameter entirely instead of passing `fields: "*"`. + +- **Custom Properties** – Update operations now use `opType=replace` to merge custom properties instead of overwriting them. + +## 📚 Migration Guide + +### From v1.x to v2.0 + +**Before (v1.x):** +```javascript +// Separate tools per operation +await callTool('lm_list_devices', { filter: 'hostStatus:alive' }) +await callTool('lm_create_device', { displayName: 'server1', ... }) +``` + +**After (v2.0):** +```javascript +// Unified tool with operation parameter +await callTool('lm_device', { + operation: 'list', + filter: 'hostStatus:alive' +}) +await callTool('lm_device', { + operation: 'create', + displayName: 'server1', + ... +}) +``` + +--- + +**Full Changelog**: See [CHANGELOG.md](CHANGELOG.md) for detailed changes. \ No newline at end of file diff --git a/src/api/client.ts b/src/api/client.ts index 7546d17..db796c9 100644 --- a/src/api/client.ts +++ b/src/api/client.ts @@ -51,6 +51,10 @@ export interface ApiResult { meta: LogicMonitorResponseMeta; } +export interface LogicMonitorClientOptions { + timeoutMs?: number; +} + export interface ApiListResult { items: T[]; total: number; @@ -84,11 +88,13 @@ const ALERT_FILTER_FIELDS = getKnownFields('alert'); export class LogicMonitorClient { private axiosInstance: AxiosInstance; private logger: winston.Logger; + private readonly account: string; constructor( account: string, bearerToken: string, - logger?: winston.Logger + logger?: winston.Logger, + options: LogicMonitorClientOptions = {} ) { this.logger = logger || winston.createLogger({ level: 'info', @@ -96,14 +102,17 @@ export class LogicMonitorClient { transports: [new winston.transports.Console()] }); + const timeout = options.timeoutMs ?? 30000; + this.account = account.trim().toLowerCase(); + this.axiosInstance = axios.create({ - baseURL: `https://${account}.logicmonitor.com/santaba/rest`, + baseURL: `https://${this.account}.logicmonitor.com/santaba/rest`, headers: { 'Authorization': `Bearer ${bearerToken}`, 'Content-Type': 'application/json', 'X-Version': '3' }, - timeout: 30000 + timeout }); this.axiosInstance.interceptors.response.use( @@ -1997,4 +2006,8 @@ export class LogicMonitorClient { meta: this.createResponseMeta(response, requestContext, duration) }; } + + getAccount(): string { + return this.account; + } } diff --git a/src/audit/events.ts b/src/audit/events.ts new file mode 100644 index 0000000..cd9d958 --- /dev/null +++ b/src/audit/events.ts @@ -0,0 +1,56 @@ +/** + * Audit event types and interfaces + */ + +export type AuditEventType = + | 'auth_success' + | 'auth_failure' + | 'session_created' + | 'session_closed' + | 'tool_call' + | 'tool_error' + | 'config_loaded' + | 'server_started' + | 'server_stopped'; + +export interface BaseAuditEvent { + timestamp: string; + event: AuditEventType; + requestId?: string; +} + +export interface AuthEvent extends BaseAuditEvent { + event: 'auth_success' | 'auth_failure'; + clientId?: string; + authMode: 'none' | 'bearer'; + error?: string; + ipAddress?: string; +} + +export interface SessionEvent extends BaseAuditEvent { + event: 'session_created' | 'session_closed'; + sessionId: string; + clientId: string; + authMode: 'none' | 'bearer'; + reason?: string; +} + +export interface ToolCallEvent extends BaseAuditEvent { + event: 'tool_call' | 'tool_error'; + sessionId?: string; + clientId: string; + authMode: 'none' | 'bearer'; + tool: string; + operation?: string; + success: boolean; + durationMs?: number; + error?: string; +} + +export interface ServerEvent extends BaseAuditEvent { + event: 'config_loaded' | 'server_started' | 'server_stopped'; + details?: Record; +} + +export type AuditEvent = AuthEvent | SessionEvent | ToolCallEvent | ServerEvent; + diff --git a/src/audit/logger.ts b/src/audit/logger.ts new file mode 100644 index 0000000..032fb93 --- /dev/null +++ b/src/audit/logger.ts @@ -0,0 +1,149 @@ +/** + * Audit logging system + * Structured logging for security and compliance + */ + +import winston from 'winston'; +import type { Config } from '../config/schema.js'; +import type { AuditEvent } from './events.js'; + +export class AuditLogger { + private logger: winston.Logger; + private enabled: boolean; + + constructor(config: Config) { + this.enabled = config.logging.auditLogEnabled; + + // Create dedicated audit logger + this.logger = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.json() + ), + defaultMeta: { + service: 'logicmonitor-mcp', + audit: true, + }, + transports: [ + new winston.transports.Console({ + format: config.logging.format === 'simple' + ? winston.format.combine( + winston.format.colorize(), + winston.format.simple() + ) + : winston.format.json(), + }), + ], + }); + } + + /** + * Log an audit event + */ + log(event: AuditEvent): void { + if (!this.enabled) { + return; + } + + this.logger.info('audit_event', event); + } + + /** + * Log authentication success + */ + logAuthSuccess(clientId: string, authMode: 'none' | 'bearer', ipAddress?: string, requestId?: string): void { + this.log({ + timestamp: new Date().toISOString(), + event: 'auth_success', + clientId, + authMode, + ipAddress, + requestId, + }); + } + + /** + * Log authentication failure + */ + logAuthFailure(authMode: 'none' | 'bearer', error: string, ipAddress?: string, requestId?: string): void { + this.log({ + timestamp: new Date().toISOString(), + event: 'auth_failure', + authMode, + error, + ipAddress, + requestId, + }); + } + + /** + * Log session creation + */ + logSessionCreated(sessionId: string, clientId: string, authMode: 'none' | 'bearer', requestId?: string): void { + this.log({ + timestamp: new Date().toISOString(), + event: 'session_created', + sessionId, + clientId, + authMode, + requestId, + }); + } + + /** + * Log session closure + */ + logSessionClosed(sessionId: string, clientId: string, authMode: 'none' | 'bearer', reason?: string, requestId?: string): void { + this.log({ + timestamp: new Date().toISOString(), + event: 'session_closed', + sessionId, + clientId, + authMode, + reason, + requestId, + }); + } + + /** + * Log tool call + */ + logToolCall( + clientId: string, + authMode: 'none' | 'bearer', + tool: string, + operation: string | undefined, + success: boolean, + durationMs?: number, + sessionId?: string, + error?: string, + requestId?: string + ): void { + this.log({ + timestamp: new Date().toISOString(), + event: success ? 'tool_call' : 'tool_error', + sessionId, + clientId, + authMode, + tool, + operation, + success, + durationMs, + error, + requestId, + }); + } + + /** + * Log server event + */ + logServerEvent(event: 'config_loaded' | 'server_started' | 'server_stopped', details?: Record): void { + this.log({ + timestamp: new Date().toISOString(), + event, + details, + }); + } +} + diff --git a/src/auth/bearer.ts b/src/auth/bearer.ts new file mode 100644 index 0000000..ec43093 --- /dev/null +++ b/src/auth/bearer.ts @@ -0,0 +1,39 @@ +/** + * Bearer token authentication + * Simple static token validation + */ + +import type { AuthValidator, AuthResult } from './types.js'; +import type { CredentialMapper } from './credentialMapper.js'; + +export class BearerAuthValidator implements AuthValidator { + private validTokens: Set; + + constructor( + tokens: string[], + private credentialMapper: CredentialMapper + ) { + this.validTokens = new Set(tokens); + } + + async validate(token: string): Promise { + if (!this.validTokens.has(token)) { + return { + success: false, + error: 'Invalid bearer token', + }; + } + + // Token is valid - get credentials from mapping (if available) + // Note: credentials can also be provided via X-LM-Account and X-LM-Bearer-Token headers + // which are handled by the middleware, so we don't fail if mapping is missing + const credentials = this.credentialMapper.getCredentials(token); + + return { + success: true, + clientId: token, // Use token as client ID (could be hashed for security) + credentials, + }; + } +} + diff --git a/src/auth/credentialMapper.ts b/src/auth/credentialMapper.ts new file mode 100644 index 0000000..b7f8809 --- /dev/null +++ b/src/auth/credentialMapper.ts @@ -0,0 +1,79 @@ +/** + * Credential mapper - maps authentication identities to LogicMonitor credentials + */ + +import type { Config } from '../config/schema.js'; + +export interface LMCredentials { + lm_account: string; + lm_bearer_token: string; +} + +export class CredentialMapper { + private mapping: Map; + private wildcardCredentials?: LMCredentials; + private defaultCredentials?: LMCredentials; + + constructor(config: Config) { + this.mapping = new Map(); + + // Load credential mapping from config + if (config.auth.credentialMapping) { + for (const [key, value] of Object.entries(config.auth.credentialMapping)) { + if (key === '*') { + this.wildcardCredentials = { + lm_account: value.account, + lm_bearer_token: value.token, + }; + } else { + this.mapping.set(key, { + lm_account: value.account, + lm_bearer_token: value.token, + }); + } + } + } + + // Set default credentials from environment + if (config.logicMonitor.account && config.logicMonitor.bearerToken) { + this.defaultCredentials = { + lm_account: config.logicMonitor.account, + lm_bearer_token: config.logicMonitor.bearerToken, + }; + } + } + + /** + * Get LogicMonitor credentials for an authenticated client + */ + getCredentials(clientId: string): LMCredentials | undefined { + // 1. Try exact match + const mapped = this.mapping.get(clientId); + if (mapped) { + return mapped; + } + + // 2. Try wildcard + if (this.wildcardCredentials) { + return this.wildcardCredentials; + } + + // 3. Fall back to default + return this.defaultCredentials; + } + + /** + * Check if credentials are available for a client + */ + hasCredentials(clientId: string): boolean { + return this.getCredentials(clientId) !== undefined; + } + + /** + * Get default credentials (for backward compatibility) + */ + getDefaultCredentials(): LMCredentials | undefined { + return this.defaultCredentials; + } +} + diff --git a/src/auth/index.ts b/src/auth/index.ts new file mode 100644 index 0000000..275ffb9 --- /dev/null +++ b/src/auth/index.ts @@ -0,0 +1,125 @@ +/** + * Authentication manager + * Selects and manages authentication mode + */ + +import type { Config } from '../config/schema.js'; +import type { AuthValidator, AuthResult, AuthContext } from './types.js'; +import { CredentialMapper } from './credentialMapper.js'; +import { NoneAuthValidator } from './none.js'; +import { BearerAuthValidator } from './bearer.js'; + +export class AuthManager { + private validator: AuthValidator; + private credentialMapper: CredentialMapper; + private authMode: 'none' | 'bearer'; + + constructor(config: Config) { + this.authMode = config.auth.mode; + this.credentialMapper = new CredentialMapper(config); + + // Create appropriate validator based on mode + switch (this.authMode) { + case 'none': + this.validator = new NoneAuthValidator(this.credentialMapper); + break; + + case 'bearer': + if (!config.auth.bearerTokens || config.auth.bearerTokens.length === 0) { + throw new Error('MCP_BEARER_TOKENS is required when AUTH_MODE=bearer'); + } + this.validator = new BearerAuthValidator( + config.auth.bearerTokens, + this.credentialMapper + ); + break; + + default: + throw new Error(`Unknown auth mode: ${this.authMode}`); + } + } + + /** + * Authenticate a request + * @param authHeader Authorization header value (e.g., "Bearer token123") + * @returns Authentication result with client context + */ + async authenticate(authHeader?: string): Promise { + // For 'none' mode, no auth header is required + if (this.authMode === 'none') { + return this.validator.validate(''); + } + + // For bearer mode, auth header is required + if (!authHeader) { + return { + success: false, + error: 'Authorization header is required', + }; + } + + // Extract token from "Bearer " format + const token = this.extractToken(authHeader); + if (!token) { + return { + success: false, + error: 'Invalid Authorization header format. Expected: Bearer ', + }; + } + + return this.validator.validate(token); + } + + /** + * Create auth context from auth result + */ + createContext(result: AuthResult): AuthContext | null { + if (!result.success || !result.clientId) { + return null; + } + + // Credentials may come from auth result (credential mapping) or from headers (handled by middleware) + // If no credentials in result, return null - middleware will handle this case + if (!result.credentials) { + return null; + } + + return { + clientId: result.clientId, + authMode: this.authMode, + credentials: result.credentials, + }; + } + + /** + * Get auth mode + */ + getAuthMode(): 'none' | 'bearer' { + return this.authMode; + } + + /** + * Check if authentication is required for HTTP transport + */ + isAuthRequired(): boolean { + return this.authMode !== 'none'; + } + + /** + * Extract token from Authorization header + */ + private extractToken(authHeader: string): string | null { + const parts = authHeader.split(' '); + if (parts.length !== 2 || parts[0].toLowerCase() !== 'bearer') { + return null; + } + return parts[1]; + } +} + +// Export types and classes +export type { AuthResult, AuthContext, AuthValidator } from './types.js'; +export { CredentialMapper } from './credentialMapper.js'; +export { NoneAuthValidator } from './none.js'; +export { BearerAuthValidator } from './bearer.js'; + diff --git a/src/auth/middleware.ts b/src/auth/middleware.ts new file mode 100644 index 0000000..6ab7931 --- /dev/null +++ b/src/auth/middleware.ts @@ -0,0 +1,144 @@ +/** + * Express middleware for authentication + */ + +import type { Request, Response, NextFunction } from 'express'; +import type { AuthManager } from './index.js'; +import type { AuthContext } from './types.js'; +import type { LMCredentials } from './credentialMapper.js'; + +// Extend Express Request type to include auth context +declare global { + namespace Express { + interface Request { + auth?: AuthContext; + } + } +} + +/** + * Create authentication middleware + * + * Credential resolution order (highest to lowest priority): + * 1. X-LM-Account + X-LM-Bearer-Token headers (per-request override) + * 2. AUTH_CREDENTIAL_MAPPING (maps clientId to LM credentials) + * 3. LM_ACCOUNT + LM_BEARER_TOKEN (default fallback) + */ +export function createAuthMiddleware(authManager: AuthManager) { + const extractHeader = (value?: string | string[]): string | undefined => + Array.isArray(value) ? value[0] : value; + + const getLmCredentialsFromHeaders = (req: Request): { credentials?: LMCredentials; error?: string } => { + const account = extractHeader(req.headers['x-lm-account']); + const token = extractHeader(req.headers['x-lm-bearer-token']); + + if ((account && !token) || (!account && token)) { + return { error: 'Both X-LM-Account and X-LM-Bearer-Token headers are required together.' }; + } + + if (account && token) { + return { + credentials: { + lm_account: account, + lm_bearer_token: token + } + }; + } + + return {}; + }; + + return async (req: Request, res: Response, next: NextFunction) => { + const { credentials: headerCredentials, error: headerError } = getLmCredentialsFromHeaders(req); + if (headerError) { + return res.status(400).json({ + error: 'Bad Request', + message: headerError + }); + } + + // Skip auth for health check + if (req.path === '/health') { + return next(); + } + + // For 'none' mode, create anonymous context + if (!authManager.isAuthRequired()) { + const result = await authManager.authenticate(); + if (result.success) { + const context = authManager.createContext(result) || undefined; + if (context) { + if (headerCredentials) { + context.credentials = headerCredentials; + } + req.auth = context; + return next(); + } + } + + // Allow header-provided credentials even if default credentials are missing + if (headerCredentials) { + req.auth = { + clientId: 'anonymous', + authMode: 'none', + credentials: headerCredentials + }; + return next(); + } + + return res.status(401).json({ + error: 'Unauthorized', + message: 'LogicMonitor credentials are required' + }); + } + + // For bearer mode, require Authorization header + const authHeader = req.headers.authorization; + + if (!authHeader) { + return res.status(401).json({ + error: 'Unauthorized', + message: 'Authorization header is required', + }); + } + + // Authenticate + const result = await authManager.authenticate(authHeader); + + if (!result.success) { + return res.status(401).json({ + error: 'Unauthorized', + message: result.error || 'Authentication failed', + }); + } + + // Create and attach auth context + const authContext = authManager.createContext(result); + + // If no context from auth result, we need header credentials + if (!authContext) { + if (!headerCredentials) { + return res.status(401).json({ + error: 'Unauthorized', + message: 'LogicMonitor credentials are required. Provide them via credential mapping or X-LM-Account/X-LM-Bearer-Token headers.', + }); + } + + // Create context with header credentials + req.auth = { + clientId: result.clientId || 'unknown', + authMode: 'bearer', + credentials: headerCredentials + }; + return next(); + } + + // Header credentials override auth result credentials + if (headerCredentials) { + authContext.credentials = headerCredentials; + } + + req.auth = authContext; + next(); + }; +} diff --git a/src/auth/none.ts b/src/auth/none.ts new file mode 100644 index 0000000..6a2f3c0 --- /dev/null +++ b/src/auth/none.ts @@ -0,0 +1,30 @@ +/** + * No-auth mode - no authentication required + * Used for STDIO transport or trusted environments + */ + +import type { AuthValidator, AuthResult } from './types.js'; +import type { CredentialMapper } from './credentialMapper.js'; + +export class NoneAuthValidator implements AuthValidator { + constructor(private credentialMapper: CredentialMapper) {} + + async validate(_token: string): Promise { + // No authentication - use default credentials + const credentials = this.credentialMapper.getDefaultCredentials(); + + if (!credentials) { + return { + success: false, + error: 'No default LogicMonitor credentials configured', + }; + } + + return { + success: true, + clientId: 'anonymous', + credentials, + }; + } +} + diff --git a/src/auth/types.ts b/src/auth/types.ts new file mode 100644 index 0000000..04b1a35 --- /dev/null +++ b/src/auth/types.ts @@ -0,0 +1,27 @@ +/** + * Authentication types and interfaces + */ + +export interface AuthResult { + success: boolean; + clientId?: string; + error?: string; + credentials?: { + lm_account: string; + lm_bearer_token: string; + }; +} + +export interface AuthContext { + clientId: string; + authMode: 'none' | 'bearer'; + credentials: { + lm_account: string; + lm_bearer_token: string; + }; +} + +export interface AuthValidator { + validate(token: string): Promise; +} + diff --git a/src/config/defaults.ts b/src/config/defaults.ts new file mode 100644 index 0000000..43dfec1 --- /dev/null +++ b/src/config/defaults.ts @@ -0,0 +1,40 @@ +/** + * Default configuration values + */ + +export const CONFIG_DEFAULTS = { + // Server + port: 3001, + host: '0.0.0.0', + nodeEnv: 'development', + + // Transport + enableStdio: true, + enableHttp: true, + + // HTTPS + httpsEnabled: false, + httpsPort: 3443, + + // Authentication + authMode: 'none' as const, + + // LogicMonitor + lmApiTimeoutMs: 30000, + + // Rate limiting is disabled by default for MCP servers since clients are typically trusted + // Enable for public deployments or when serving untrusted clients + rateLimitEnabled: false, + rateLimitWindowMs: 60000, + rateLimitMaxRequests: 100, + sessionTimeoutMs: 3600000, + + // Logging + logLevel: 'info', + logFormat: 'json' as const, + auditLogEnabled: true, +} as const; + +export type AuthMode = 'none' | 'bearer'; +export type LogFormat = 'json' | 'simple'; + diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..68d2083 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,180 @@ +/** + * Configuration loader and validator + * Loads configuration from environment variables with validation + */ + +import dotenv from 'dotenv'; +import { ValidatedConfigSchema, type Config, type CredentialMapping } from './schema.js'; +import { CONFIG_DEFAULTS } from './defaults.js'; +import { z } from 'zod'; + +// Load .env file if it exists +dotenv.config({ quiet: true }); + +/** + * Parse comma-separated string into array + */ +function parseCommaSeparated(value: string | undefined): string[] { + if (!value) return []; + return value.split(',').map(s => s.trim()).filter(Boolean); +} + +/** + * Parse JSON string safely + */ +function parseJSON(value: string | undefined, defaultValue: T): T { + if (!value) return defaultValue; + try { + return JSON.parse(value) as T; + } catch (error) { + throw new Error(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`); + } +} + +/** + * Parse boolean from string + */ +function parseBoolean(value: string | undefined, defaultValue: boolean): boolean { + if (value === undefined || value === '') return defaultValue; + return value.toLowerCase() === 'true' || value === '1'; +} + +/** + * Parse integer from string + */ +function parseInt(value: string | undefined, defaultValue: number): number { + if (value === undefined || value === '') return defaultValue; + const parsed = Number.parseInt(value, 10); + if (Number.isNaN(parsed)) { + throw new Error(`Invalid integer value: ${value}`); + } + return parsed; +} + +/** + * Load configuration from environment variables + */ +export function loadConfig(): Config { + const rawConfig = { + server: { + port: parseInt(process.env.PORT, CONFIG_DEFAULTS.port), + host: process.env.HOST || CONFIG_DEFAULTS.host, + nodeEnv: process.env.NODE_ENV || CONFIG_DEFAULTS.nodeEnv, + }, + + transport: { + enableStdio: parseBoolean(process.env.ENABLE_STDIO, CONFIG_DEFAULTS.enableStdio), + enableHttp: parseBoolean(process.env.ENABLE_HTTP, CONFIG_DEFAULTS.enableHttp), + }, + + https: { + enabled: parseBoolean(process.env.HTTPS_ENABLED, CONFIG_DEFAULTS.httpsEnabled), + port: parseInt(process.env.HTTPS_PORT, CONFIG_DEFAULTS.httpsPort), + certPath: process.env.HTTPS_CERT_PATH, + keyPath: process.env.HTTPS_KEY_PATH, + caPath: process.env.HTTPS_CA_PATH, + }, + + auth: { + mode: (process.env.AUTH_MODE || CONFIG_DEFAULTS.authMode) as 'none' | 'bearer', + bearerTokens: parseCommaSeparated(process.env.MCP_BEARER_TOKENS), + credentialMapping: parseJSON( + process.env.AUTH_CREDENTIAL_MAPPING, + {} + ), + }, + + logicMonitor: { + account: process.env.LM_ACCOUNT, + bearerToken: process.env.LM_BEARER_TOKEN, + apiTimeoutMs: parseInt(process.env.LM_API_TIMEOUT_MS, CONFIG_DEFAULTS.lmApiTimeoutMs), + }, + + security: { + rateLimitEnabled: parseBoolean(process.env.RATE_LIMIT_ENABLED, CONFIG_DEFAULTS.rateLimitEnabled), + rateLimitWindowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS, CONFIG_DEFAULTS.rateLimitWindowMs), + rateLimitMaxRequests: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS, CONFIG_DEFAULTS.rateLimitMaxRequests), + sessionTimeoutMs: parseInt(process.env.SESSION_TIMEOUT_MS, CONFIG_DEFAULTS.sessionTimeoutMs), + }, + + logging: { + level: process.env.LOG_LEVEL || CONFIG_DEFAULTS.logLevel, + format: (process.env.LOG_FORMAT || CONFIG_DEFAULTS.logFormat) as 'json' | 'simple', + auditLogEnabled: parseBoolean(process.env.AUDIT_LOG_ENABLED, CONFIG_DEFAULTS.auditLogEnabled), + }, + }; + + // Validate configuration + try { + const validated = ValidatedConfigSchema.parse(rawConfig); + return validated; + } catch (error) { + if (error instanceof z.ZodError) { + const errorMessages = error.issues.map((err) => { + const path = err.path.join('.'); + return ` - ${path}: ${err.message}`; + }).join('\n'); + + throw new Error(`Configuration validation failed:\n${errorMessages}`); + } + throw error; + } +} + +/** + * Validate configuration and log warnings + */ +export function validateAndWarn(config: Config): void { + const warnings: string[] = []; + + // Warn if HTTP is enabled without authentication + if (config.transport.enableHttp && config.auth.mode === 'none') { + warnings.push( + 'WARNING: HTTP transport is enabled without authentication (AUTH_MODE=none). ' + + 'This is insecure for production deployments. ' + + 'Consider setting AUTH_MODE=bearer.' + ); + } + + // Warn if HTTPS is not enabled in production + if ( + config.server.nodeEnv === 'production' && + config.transport.enableHttp && + !config.https.enabled + ) { + warnings.push( + 'WARNING: Running in production mode without HTTPS. ' + + 'Set HTTPS_ENABLED=true for secure deployments.' + ); + } + + // Warn if no transports are enabled + if (!config.transport.enableStdio && !config.transport.enableHttp) { + throw new Error('At least one transport (STDIO or HTTP) must be enabled'); + } + + // Log warnings + if (warnings.length > 0) { + console.warn('\n' + warnings.join('\n\n') + '\n'); + } +} + +/** + * Get the singleton config instance + */ +let configInstance: Config | null = null; + +export function getConfig(): Config { + if (!configInstance) { + configInstance = loadConfig(); + validateAndWarn(configInstance); + } + return configInstance; +} + +/** + * Reset config instance (useful for testing) + */ +export function resetConfig(): void { + configInstance = null; +} diff --git a/src/config/schema.ts b/src/config/schema.ts new file mode 100644 index 0000000..4cd5335 --- /dev/null +++ b/src/config/schema.ts @@ -0,0 +1,118 @@ +/** + * Configuration schema and types using Zod + */ + +import { z } from 'zod'; +import { CONFIG_DEFAULTS } from './defaults.js'; + +// Auth mode enum +export const AuthModeSchema = z.enum(['none', 'bearer']); +export type AuthMode = z.infer; + +// Log format enum +export const LogFormatSchema = z.enum(['json', 'simple']); +export type LogFormat = z.infer; + +// Credential mapping schema +export const CredentialMappingSchema = z.record( + z.string(), + z.object({ + account: z.string(), + token: z.string(), + }) +); +export type CredentialMapping = z.infer; + +// Main configuration schema +export const ConfigSchema = z.object({ + // Server + server: z.object({ + port: z.number().int().min(1).max(65535).default(CONFIG_DEFAULTS.port), + host: z.string().default(CONFIG_DEFAULTS.host), + nodeEnv: z.string().default(CONFIG_DEFAULTS.nodeEnv), + }), + + // Transport + transport: z.object({ + enableStdio: z.boolean().default(CONFIG_DEFAULTS.enableStdio), + enableHttp: z.boolean().default(CONFIG_DEFAULTS.enableHttp), + }), + + // HTTPS + https: z.object({ + enabled: z.boolean().default(CONFIG_DEFAULTS.httpsEnabled), + port: z.number().int().min(1).max(65535).default(CONFIG_DEFAULTS.httpsPort), + certPath: z.string().optional(), + keyPath: z.string().optional(), + caPath: z.string().optional(), + }).refine( + (data) => { + // If HTTPS is enabled, cert and key paths are required + if (data.enabled) { + return data.certPath && data.keyPath; + } + return true; + }, + { + message: 'HTTPS_CERT_PATH and HTTPS_KEY_PATH are required when HTTPS_ENABLED=true', + } + ), + + // Authentication + auth: z.object({ + mode: AuthModeSchema.default(CONFIG_DEFAULTS.authMode), + + // Bearer token auth + bearerTokens: z.array(z.string()).optional(), + + // Credential mapping (auth identity -> LM credentials) + credentialMapping: CredentialMappingSchema.optional(), + }).refine( + (data) => { + // If auth mode is bearer, tokens are required + if (data.mode === 'bearer') { + return data.bearerTokens && data.bearerTokens.length > 0; + } + return true; + }, + { + message: 'MCP_BEARER_TOKENS is required when AUTH_MODE=bearer', + } + ), + + // LogicMonitor + logicMonitor: z.object({ + account: z.string().optional(), + bearerToken: z.string().optional(), + apiTimeoutMs: z.number().int().min(1000).default(CONFIG_DEFAULTS.lmApiTimeoutMs), + }), + + // Security + security: z.object({ + rateLimitEnabled: z.boolean().default(CONFIG_DEFAULTS.rateLimitEnabled), + rateLimitWindowMs: z.number().int().min(1000).default(CONFIG_DEFAULTS.rateLimitWindowMs), + rateLimitMaxRequests: z.number().int().min(1).default(CONFIG_DEFAULTS.rateLimitMaxRequests), + sessionTimeoutMs: z.number().int().min(60000).default(CONFIG_DEFAULTS.sessionTimeoutMs), + }), + + // Logging + logging: z.object({ + level: z.string().default(CONFIG_DEFAULTS.logLevel), + format: LogFormatSchema.default(CONFIG_DEFAULTS.logFormat), + auditLogEnabled: z.boolean().default(CONFIG_DEFAULTS.auditLogEnabled), + }), +}); + +export type Config = z.infer; + +// Validation refinements for the entire config +export const ValidatedConfigSchema = ConfigSchema.refine( + (data) => { + // If HTTP is enabled without auth, log a warning (not an error for backward compatibility) + if (data.transport.enableHttp && data.auth.mode === 'none') { + // This will be logged as a warning in the config loader + return true; + } + return true; + } +); diff --git a/src/index.ts b/src/index.ts index 3de6bbf..2e72e68 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,25 +1,30 @@ #!/usr/bin/env node -import dotenv from 'dotenv'; +import https from 'https'; +import fs from 'fs'; import express from 'express'; -import helmet from 'helmet'; import winston from 'winston'; import { createServer } from './server.js'; +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; import { randomUUID } from 'crypto'; import { APP_INFO } from './appInfo.js'; import { SessionManager } from './session/sessionManager.js'; +import { getConfig } from './config/index.js'; +import { AuthManager } from './auth/index.js'; +import { createAuthMiddleware } from './auth/middleware.js'; +import { createRequestIdMiddleware } from './middleware/requestId.js'; +import { createRateLimitMiddleware } from './middleware/rateLimit.js'; +import { AuditLogger } from './audit/logger.js'; +import { GracefulShutdown } from './utils/gracefulShutdown.js'; -// Load environment variables -dotenv.config(); - -const PORT = parseInt(process.env.PORT || '3001', 10); -const NODE_ENV = process.env.NODE_ENV || 'development'; +// Load configuration +const config = getConfig(); // Set up logger const logger = winston.createLogger({ - level: process.env.LOG_LEVEL || 'info', + level: config.logging.level, format: winston.format.combine( winston.format.timestamp(), winston.format.errors({ stack: true }), @@ -27,7 +32,7 @@ const logger = winston.createLogger({ ), transports: [ new winston.transports.Console({ - format: NODE_ENV === 'development' + format: config.logging.format === 'simple' ? winston.format.combine( winston.format.colorize(), winston.format.simple() @@ -37,99 +42,104 @@ const logger = winston.createLogger({ ] }); +// Initialize audit logger +const auditLogger = new AuditLogger(config); + +// Initialize graceful shutdown +const gracefulShutdown = new GracefulShutdown(logger); +gracefulShutdown.setupSignalHandlers(); + async function startHttpServer() { const app = express(); - // Security middleware - app.use(helmet()); + // Initialize auth manager + const authManager = new AuthManager(config); + + // Request ID middleware + app.use(createRequestIdMiddleware()); // Parse JSON bodies app.use(express.json()); + + // Authentication middleware + app.use(createAuthMiddleware(authManager)); + + // Rate limiting middleware (optional, disabled by default for trusted MCP clients) + app.use(createRateLimitMiddleware(config)); // Health check endpoint app.get('/health', (_req, res) => { - res.json({ status: 'ok', service: APP_INFO.name, version: APP_INFO.version }); + res.json({ + status: 'ok', + service: APP_INFO.name, + version: APP_INFO.version, + authMode: authManager.getAuthMode(), + }); }); type HttpSessionContext = { transport: StreamableHTTPServerTransport; - server: Awaited>; - credentials: { - lm_account: string; - lm_bearer_token: string; - }; + server: McpServer; + clientId: string; + credentialsKey: string; sessionId?: string; closed: boolean; sessionManager: SessionManager; }; const sessions = new Map(); + const buildCredentialsKey = (creds: { lm_account: string; lm_bearer_token: string }) => + `${creds.lm_account}:${creds.lm_bearer_token}`; // Handle all MCP requests at /mcp endpoint - app.all('/mcp', async (req, res) => { + app.all('/mcp', async (req, res): Promise => { try { - const sessionId = req.headers['mcp-session-id'] as string | undefined; - - const headerAccount = Array.isArray(req.headers['x-lm-account']) - ? req.headers['x-lm-account'][0] - : (req.headers['x-lm-account'] as string | undefined); - const headerToken = Array.isArray(req.headers['x-lm-bearer-token']) - ? req.headers['x-lm-bearer-token'][0] - : (req.headers['x-lm-bearer-token'] as string | undefined); - - let credentials: { lm_account: string; lm_bearer_token: string } | undefined; - - if (headerAccount || headerToken) { - if (!headerAccount || !headerToken) { - res.status(401).json({ error: 'Both X-LM-Account and X-LM-Bearer-Token headers are required.' }); - return; - } - credentials = { - lm_account: headerAccount, - lm_bearer_token: headerToken - }; + // Auth context is set by auth middleware + if (!req.auth) { + res.status(401).json({ error: 'Authentication required' }); + return; } + const { clientId, credentials } = req.auth; + const credentialsKey = buildCredentialsKey(credentials); + const sessionId = req.headers['mcp-session-id'] as string | undefined; + let sessionContext: HttpSessionContext | undefined; + // Try to reuse existing session if (sessionId) { sessionContext = sessions.get(sessionId); if (sessionContext?.closed) { sessions.delete(sessionId); sessionContext = undefined; } + // Verify client ID and credentials match if (sessionContext) { - if (credentials) { - const credsMatch = - sessionContext.credentials.lm_account === credentials.lm_account && - sessionContext.credentials.lm_bearer_token === credentials.lm_bearer_token; - - if (!credsMatch) { - res.status(403).json({ error: 'Credential mismatch for existing MCP session.' }); - return; - } - } else { - credentials = sessionContext.credentials; + if (sessionContext.clientId !== clientId) { + auditLogger.logAuthFailure( + req.auth.authMode, + 'Client ID mismatch for existing session', + req.ip, + req.requestId + ); + res.status(403).json({ error: 'Client ID mismatch for existing MCP session.' }); + return; } - } - } - if (!credentials) { - const envAccount = process.env.LM_ACCOUNT; - const envToken = process.env.LM_BEARER_TOKEN; - if (envAccount && envToken) { - credentials = { - lm_account: envAccount, - lm_bearer_token: envToken - }; + if (sessionContext.credentialsKey !== credentialsKey) { + auditLogger.logAuthFailure( + req.auth.authMode, + 'Credential mismatch for existing session', + req.ip, + req.requestId + ); + res.status(403).json({ error: 'Credential mismatch for existing MCP session.' }); + return; + } } } - if (!credentials) { - res.status(401).json({ error: 'LogicMonitor credentials are required via headers or environment variables.' }); - return; - } - + // Create new session if needed if (!sessionContext) { let contextRef: HttpSessionContext; let closeSession: (reason: string) => Promise; @@ -139,26 +149,30 @@ async function startHttpServer() { onsessioninitialized: (newSessionId) => { contextRef.sessionId = newSessionId; sessions.set(newSessionId, contextRef); - logger.info(`Session initialized: ${newSessionId}`); + logger.info(`Session initialized: ${newSessionId} for client: ${clientId}`); + const authMode = req.auth?.authMode || 'none'; + auditLogger.logSessionCreated(newSessionId, clientId, authMode, req.requestId); }, onsessionclosed: async (closedSessionId) => { await closeSession(`session closed request (${closedSessionId})`); } }); - const mcpServer = await createServer({ + const { server: mcpServer, sessionManager: serverSessionManager } = await createServer({ logger, - credentials + credentials, + clientId, + authMode: req.auth.authMode, + apiTimeoutMs: config.logicMonitor.apiTimeoutMs, }); - const sessionManager = - ((mcpServer as unknown) as { sessionManager?: SessionManager }).sessionManager ?? - new SessionManager(); + const sessionManager = serverSessionManager; contextRef = { transport, server: mcpServer, - credentials, + clientId, + credentialsKey, closed: false, sessionManager }; @@ -172,6 +186,14 @@ async function startHttpServer() { if (contextRef.sessionId) { sessions.delete(contextRef.sessionId); logger.info(`Session ${contextRef.sessionId} closed (${reason})`); + const authMode = req.auth?.authMode || 'none'; + auditLogger.logSessionClosed( + contextRef.sessionId, + clientId, + authMode, + reason, + req.requestId + ); } try { @@ -198,7 +220,8 @@ async function startHttpServer() { await sessionContext.server.connect(transport); } - await sessionContext.transport.handleRequest(req, res, req.body); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + await sessionContext.transport.handleRequest(req as any, res, req.body); } catch (error) { logger.error('MCP request error:', error); if (!res.headersSent) { @@ -213,13 +236,68 @@ async function startHttpServer() { res.status(500).json({ error: 'Internal server error' }); }); - // Start server - app.listen(PORT, () => { - logger.info(`${APP_INFO.name} v${APP_INFO.version} running on port ${PORT}`); + // Register session cleanup on shutdown + gracefulShutdown.registerHandler(async () => { + logger.info('Closing all MCP sessions...'); + const closePromises = Array.from(sessions.values()).map(async (session) => { + if (!session.closed && session.sessionId) { + try { + await session.server.close(); + session.sessionManager.deleteContext(session.sessionId); + session.closed = true; + } catch (error) { + logger.error(`Error closing session ${session.sessionId}:`, error); + } + } + }); + await Promise.all(closePromises); + sessions.clear(); + logger.info('All MCP sessions closed'); + }); + + // Start HTTP server + const httpServer = app.listen(config.server.port, config.server.host, () => { + logger.info(`${APP_INFO.name} v${APP_INFO.version} running on http://${config.server.host}:${config.server.port}`); logger.info('Available endpoints:'); - logger.info(` Health: http://localhost:${PORT}/health`); - logger.info(` MCP: http://localhost:${PORT}/mcp`); + logger.info(` Health: http://localhost:${config.server.port}/health`); + logger.info(` MCP: http://localhost:${config.server.port}/mcp`); + logger.info(`Auth mode: ${authManager.getAuthMode()}`); + auditLogger.logServerEvent('server_started', { + port: config.server.port, + authMode: authManager.getAuthMode(), + httpsEnabled: false, + }); }); + + gracefulShutdown.registerServer(httpServer, 'HTTP'); + + // Start HTTPS server if enabled + if (config.https.enabled) { + try { + // Config validation ensures certPath and keyPath exist when HTTPS is enabled + const httpsOptions = { + cert: fs.readFileSync(config.https.certPath as string), + key: fs.readFileSync(config.https.keyPath as string), + ca: config.https.caPath ? fs.readFileSync(config.https.caPath) : undefined, + }; + + const httpsServer = https.createServer(httpsOptions, app); + + httpsServer.listen(config.https.port, config.server.host, () => { + logger.info(`HTTPS server running on https://${config.server.host}:${config.https.port}`); + auditLogger.logServerEvent('server_started', { + port: config.https.port, + authMode: authManager.getAuthMode(), + httpsEnabled: true, + }); + }); + + gracefulShutdown.registerServer(httpsServer, 'HTTPS'); + } catch (error) { + logger.error('Failed to start HTTPS server:', error); + throw error; + } + } } async function startStdioServer() { @@ -239,52 +317,68 @@ async function startStdioServer() { ] }); - // Get credentials from environment variables - const lmAccount = process.env.LM_ACCOUNT; - const lmBearerToken = process.env.LM_BEARER_TOKEN; - - if (!lmAccount || !lmBearerToken) { - stdioLogger.error('Missing required environment variables: LM_ACCOUNT and/or LM_BEARER_TOKEN'); - process.exit(1); + // Validate credentials + if (!config.logicMonitor.account || !config.logicMonitor.bearerToken) { + stdioLogger.error('STDIO mode requires LM_ACCOUNT and LM_BEARER_TOKEN environment variables'); + throw new Error('Missing required LogicMonitor credentials for STDIO mode'); } - const server = await createServer({ + stdioLogger.error(`Starting STDIO mode with account: ${config.logicMonitor.account}`); + + const { server } = await createServer({ logger: stdioLogger, credentials: { - lm_account: lmAccount, - lm_bearer_token: lmBearerToken - } + lm_account: config.logicMonitor.account, + lm_bearer_token: config.logicMonitor.bearerToken + }, + clientId: 'stdio-client', + authMode: 'none', + apiTimeoutMs: config.logicMonitor.apiTimeoutMs, }); + const transport = new StdioServerTransport(); + // Register cleanup on shutdown + gracefulShutdown.registerHandler(async () => { + stdioLogger.error('Closing STDIO server...'); + await server.close(); + }); + await server.connect(transport); + + stdioLogger.error('STDIO server connected and ready'); } // Main entry point async function main() { try { - // Check if running with stdio transport (for local testing) - if (process.argv.includes('--stdio')) { + auditLogger.logServerEvent('config_loaded', { + authMode: config.auth.mode, + transports: { + stdio: config.transport.enableStdio, + http: config.transport.enableHttp, + https: config.https.enabled, + }, + }); + + // Determine which transports to start + const isStdioMode = process.argv.includes('--stdio') || !config.transport.enableHttp; + + if (isStdioMode && config.transport.enableStdio) { + logger.info('Starting in STDIO mode'); await startStdioServer(); - } else { + } else if (config.transport.enableHttp) { + logger.info('Starting in HTTP mode'); await startHttpServer(); + } else { + throw new Error('No transports enabled. Set ENABLE_STDIO=true or ENABLE_HTTP=true'); } } catch (error) { logger.error('Failed to start server', error); + await gracefulShutdown.shutdown('startup_error'); process.exit(1); } } -// Handle uncaught errors -process.on('unhandledRejection', (reason, _promise) => { - logger.error('Unhandled Rejection, reason:', reason); - process.exit(1); -}); - -process.on('uncaughtException', (error) => { - logger.error('Uncaught Exception:', error); - process.exit(1); -}); - // Start the server main(); diff --git a/src/middleware/rateLimit.ts b/src/middleware/rateLimit.ts new file mode 100644 index 0000000..24e52f1 --- /dev/null +++ b/src/middleware/rateLimit.ts @@ -0,0 +1,52 @@ +/** + * Per-client rate limiting middleware + */ + +import { ipKeyGenerator, rateLimit } from 'express-rate-limit'; +import type { Request, Response, NextFunction } from 'express'; +import type { Config } from '../config/schema.js'; + +/** + * Create rate limiting middleware + */ +export function createRateLimitMiddleware(config: Config) { + if (!config.security.rateLimitEnabled) { + // Return no-op middleware if rate limiting is disabled + return (_req: Request, _res: Response, next: NextFunction) => { + next(); + }; + } + + return rateLimit({ + windowMs: config.security.rateLimitWindowMs, + max: config.security.rateLimitMaxRequests, + + // Use client ID from auth context for per-client limiting + keyGenerator: (req) => { + // Use authenticated client ID if available + const authReq = req as Request; + if (authReq.auth?.clientId) { + return `client:${authReq.auth.clientId}`; + } + + // Fall back to IP-based key for unauthenticated requests + const forwardedFor = req.headers['x-forwarded-for']; + const ipHeader = Array.isArray(forwardedFor) ? forwardedFor[0] : forwardedFor; + const ip = req.ip || ipHeader; + return ip ? `ip:${ipKeyGenerator(ip)}` : 'unauthenticated'; + }, + + // Standard rate limit headers + standardHeaders: true, + legacyHeaders: false, + + // Custom error message + message: { + error: 'Too Many Requests', + message: 'Rate limit exceeded. Please try again later.', + }, + + // Skip rate limiting for health checks + skip: (req) => req.path === '/health', + }); +} diff --git a/src/middleware/requestId.ts b/src/middleware/requestId.ts new file mode 100644 index 0000000..c841857 --- /dev/null +++ b/src/middleware/requestId.ts @@ -0,0 +1,31 @@ +/** + * Request ID middleware + * Adds unique request ID to each request for tracking + */ + +import { randomUUID } from 'crypto'; +import type { Request, Response, NextFunction } from 'express'; + +declare global { + namespace Express { + interface Request { + requestId?: string; + } + } +} + +/** + * Create request ID middleware + */ +export function createRequestIdMiddleware() { + return (req: Request, res: Response, next: NextFunction) => { + // Use existing request ID from header, or generate new one + const requestId = (req.headers['x-request-id'] as string) || randomUUID(); + + req.requestId = requestId; + res.setHeader('X-Request-ID', requestId); + + next(); + }; +} + diff --git a/src/resources/alert/AlertHandler.ts b/src/resources/alert/alertHandler.ts similarity index 61% rename from src/resources/alert/AlertHandler.ts rename to src/resources/alert/alertHandler.ts index 9546550..2139fdd 100644 --- a/src/resources/alert/AlertHandler.ts +++ b/src/resources/alert/alertHandler.ts @@ -3,7 +3,7 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; @@ -14,26 +14,16 @@ import type { CreateOperationArgs, UpdateOperationArgs, DeleteOperationArgs, - OperationResult + OperationResult, + OperationType } from '../../types/operations.js'; -import { - validateListAlerts, - validateGetAlert, - validateUpdateAlert -} from './alertSchemas.js'; +import { validateListAlerts, validateGetAlert, validateUpdateAlert } from './alertZodSchemas.js'; +import { getAlertLink } from '../../utils/resourceLinks.js'; export class AlertHandler extends ResourceHandler { - constructor( - client: LogicMonitorClient, - sessionManager: SessionManager, - sessionId?: string - ) { + constructor(client: LogicMonitorClient, sessionManager: SessionManager, sessionId?: string) { super( - { - resourceType: 'alert', - resourceName: 'alert', - idField: 'id' - }, + { resourceType: 'alert', resourceName: 'alert', idField: 'id' }, client, sessionManager, sessionId @@ -41,7 +31,7 @@ export class AlertHandler extends ResourceHandler { } protected async handleList(args: ListOperationArgs): Promise> { - const validated = validateListAlerts(args); + const validated = validateListAlerts({ ...args, operation: 'list' as const }); const { fields, filter, size, offset, autoPaginate, sort, needMessage, customColumns } = validated; const fieldConfig = sanitizeFields('alert', fields); @@ -66,7 +56,7 @@ export class AlertHandler extends ResourceHandler { const result: OperationResult = { success: true, total: apiResult.total, - items: apiResult.items as LMAlert[], + items: apiResult.items as unknown as LMAlert[], request: { filter, size, @@ -87,8 +77,8 @@ export class AlertHandler extends ResourceHandler { } protected async handleGet(args: GetOperationArgs): Promise> { - const validated = validateGetAlert(args); - const alertId = validated.id ?? this.resolveId(validated); + const validated = validateGetAlert({ ...args, operation: 'get' as const }); + const alertId = validated.id ?? validated.alertId; if (!alertId) { throw new McpError(ErrorCode.InvalidParams, 'Alert ID is required'); @@ -106,7 +96,7 @@ export class AlertHandler extends ResourceHandler { this.storeInSession('get', result); this.sessionManager.recordOperation(this.sessionContext.id, 'alert', 'get', result); - this.sessionManager.cacheResource(this.sessionContext.id, 'alert', alertId, apiResult.data); + this.sessionManager.cacheResource(this.sessionContext.id, 'alert', String(alertId), apiResult.data); return result; } @@ -116,11 +106,14 @@ export class AlertHandler extends ResourceHandler { } protected async handleUpdate(args: UpdateOperationArgs): Promise> { - const validated = validateUpdateAlert(args); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const action = (validated as any).action; + const validated = validateUpdateAlert({ ...args, operation: 'update' as const }); + const action = validated.action; + + if (!action) { + throw new McpError(ErrorCode.InvalidParams, 'action is required for update operation'); + } - const alertId = validated.id ?? this.resolveId(validated); + const alertId = validated.id ?? validated.alertId; if (!alertId) { throw new McpError(ErrorCode.InvalidParams, 'Alert ID is required'); } @@ -128,12 +121,16 @@ export class AlertHandler extends ResourceHandler { let apiResult; switch (action) { case 'ack': - // eslint-disable-next-line @typescript-eslint/no-explicit-any - apiResult = await this.client.ackAlert(String(alertId), (validated as any).ackComment || ''); + if (!validated.ackComment) { + throw new McpError(ErrorCode.InvalidParams, 'ackComment is required for ack action'); + } + apiResult = await this.client.ackAlert(String(alertId), validated.ackComment); break; case 'note': - // eslint-disable-next-line @typescript-eslint/no-explicit-any - apiResult = await this.client.addAlertNote(String(alertId), (validated as any).note || ''); + if (!validated.note) { + throw new McpError(ErrorCode.InvalidParams, 'note is required for note action'); + } + apiResult = await this.client.addAlertNote(String(alertId), validated.note); break; case 'escalate': apiResult = await this.client.escalateAlert(String(alertId)); @@ -144,8 +141,7 @@ export class AlertHandler extends ResourceHandler { const result: OperationResult = { success: true, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - data: { alertId, action } as any, + data: { alertId, action } as unknown as LMAlert, raw: apiResult.raw, meta: apiResult.meta }; @@ -159,5 +155,38 @@ export class AlertHandler extends ResourceHandler { protected async handleDelete(_args: DeleteOperationArgs): Promise> { throw new McpError(ErrorCode.InvalidRequest, 'Alert deletion is not supported via API'); } -} + protected override enhanceResult(operation: OperationType, result: OperationResult): void { + super.enhanceResult(operation, result); + this.attachAlertLinks(result); + } + + private attachAlertLinks(result: OperationResult): void { + if (result.data) { + this.addLinkToAlert(result.data as unknown as Record); + } + if (Array.isArray(result.items)) { + result.items.forEach(item => + this.addLinkToAlert(item as unknown as Record) + ); + } + } + + private addLinkToAlert(alert: Record | undefined): void { + if (!alert) { + return; + } + try { + const alertId = alert.id ?? alert.alertId ?? alert.internalId; + if (!alertId) { + return; + } + alert.linkUrl = getAlertLink({ + company: this.client.getAccount(), + alertId: alertId as number | string + }); + } catch { + // Ignore failures to keep responses flowing + } + } +} diff --git a/src/resources/alert/alertSchemas.ts b/src/resources/alert/alertSchemas.ts deleted file mode 100644 index 4575260..0000000 --- a/src/resources/alert/alertSchemas.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Alert validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -export function validateListAlerts(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - fields: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - autoPaginate: Joi.boolean().optional(), - sort: Joi.string().optional(), - needMessage: Joi.boolean().optional(), - customColumns: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetAlert(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.alternatives().try(Joi.string(), Joi.number()).optional(), - alertId: Joi.alternatives().try(Joi.string(), Joi.number()).optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateAlert(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.alternatives().try(Joi.string(), Joi.number()).optional(), - alertId: Joi.alternatives().try(Joi.string(), Joi.number()).optional(), - action: Joi.string().valid('ack', 'note', 'escalate').required(), - ackComment: Joi.string().when('action', { - is: 'ack', - then: Joi.required(), - otherwise: Joi.optional() - }), - note: Joi.string().when('action', { - is: 'note', - then: Joi.required(), - otherwise: Joi.optional() - }) - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/alert/alertZodSchemas.ts b/src/resources/alert/alertZodSchemas.ts new file mode 100644 index 0000000..19b59cb --- /dev/null +++ b/src/resources/alert/alertZodSchemas.ts @@ -0,0 +1,115 @@ +/** + * Alert Zod validation schemas + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Base schemas for alert list operation +export const AlertListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + fields: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + autoPaginate: z.boolean().optional(), + sort: z.string().optional(), + needMessage: z.boolean().optional(), + customColumns: z.string().optional() +}).strict(); + +// Base schemas for alert get operation +export const AlertGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.union([z.string(), z.number()]).optional(), + alertId: z.union([z.string(), z.number()]).optional() +}).strict(); + +// Base schemas for alert update operation (ack, note, escalate) +const AlertAckArgsSchema = z.object({ + operation: z.literal('update'), + id: z.union([z.string(), z.number()]).optional(), + alertId: z.union([z.string(), z.number()]).optional(), + action: z.literal('ack'), + ackComment: z.string() +}).strict(); + +const AlertNoteArgsSchema = z.object({ + operation: z.literal('update'), + id: z.union([z.string(), z.number()]).optional(), + alertId: z.union([z.string(), z.number()]).optional(), + action: z.literal('note'), + note: z.string() +}).strict(); + +const AlertEscalateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.union([z.string(), z.number()]).optional(), + alertId: z.union([z.string(), z.number()]).optional(), + action: z.literal('escalate') +}).strict(); + +export const AlertUpdateArgsSchema = z.discriminatedUnion('action', [ + AlertAckArgsSchema, + AlertNoteArgsSchema, + AlertEscalateArgsSchema +]); + +// Combined operation schema with discriminated union +export const AlertOperationArgsSchema = z.discriminatedUnion('operation', [ + AlertListArgsSchema, + AlertGetArgsSchema, + AlertUpdateArgsSchema +]); + +// Type exports +export type AlertListArgs = z.infer; +export type AlertGetArgs = z.infer; +export type AlertUpdateArgs = z.infer; +export type AlertOperationArgs = z.infer; + +// Validation helper functions +export function validateAlertOperation(args: unknown): AlertOperationArgs { + const result = AlertOperationArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateListAlerts(args: unknown) { + const result = AlertListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetAlert(args: unknown) { + const result = AlertGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateAlert(args: unknown) { + const result = AlertUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/base/BatchResolver.ts b/src/resources/base/batchResolver.ts similarity index 100% rename from src/resources/base/BatchResolver.ts rename to src/resources/base/batchResolver.ts diff --git a/src/resources/base/ResourceHandler.ts b/src/resources/base/resourceHandler.ts similarity index 62% rename from src/resources/base/ResourceHandler.ts rename to src/resources/base/resourceHandler.ts index 97dc42d..2d9c0a4 100644 --- a/src/resources/base/ResourceHandler.ts +++ b/src/resources/base/resourceHandler.ts @@ -6,6 +6,9 @@ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager, SessionContext } from '../../session/sessionManager.js'; +import { capitalizeFirst } from '../../utils/strings.js'; +import { batchProcessor, type BatchOptions, type BatchResult, type BatchDiagnostics } from '../../utils/batchProcessor.js'; +import type { LogicMonitorResponseMeta } from '../../api/client.js'; import type { ResourceType, OperationType, @@ -26,22 +29,72 @@ export interface ResourceHandlerConfig { export abstract class ResourceHandler { protected readonly config: ResourceHandlerConfig; - protected readonly client: LogicMonitorClient; + private readonly _client: LogicMonitorClient | undefined; protected readonly sessionManager: SessionManager; protected readonly sessionContext: SessionContext; + private _progressCallback?: (progress: number, total: number) => void; constructor( config: ResourceHandlerConfig, - client: LogicMonitorClient, + client: LogicMonitorClient | undefined, sessionManager: SessionManager, sessionId?: string ) { this.config = config; - this.client = client; + this._client = client; this.sessionManager = sessionManager; this.sessionContext = sessionManager.getContext(sessionId); } + /** + * Access the API client. Throws a clear error if no client was provided + * (e.g. SessionHandler operates without one). + */ + protected get client(): LogicMonitorClient { + if (!this._client) { + throw new McpError( + ErrorCode.InternalError, + `${this.config.resourceType} handler requires a LogicMonitor API client but none was provided` + ); + } + return this._client; + } + + /** + * Set an optional progress callback for MCP ProgressNotifications. + * Called by the CallToolRequestSchema handler when the client supplies a progressToken. + */ + setProgressCallback(callback?: (progress: number, total: number) => void): void { + this._progressCallback = callback; + } + + /** Expose progress callback to subclasses for direct use if needed */ + protected get progressCallback(): ((progress: number, total: number) => void) | undefined { + return this._progressCallback; + } + + /** + * Wrapper around batchProcessor.processBatch that automatically wires + * the MCP progress callback so clients receive ProgressNotifications. + */ + protected async processBatch( + items: TInput[], + processor: (item: TInput, index: number) => Promise< + TData | { + data: TData; + diagnostics?: BatchDiagnostics; + meta?: LogicMonitorResponseMeta; + raw?: unknown; + } + >, + options: Omit = {} + ): Promise> { + return batchProcessor.processBatch(items, processor, { + ...options, + onProgress: this._progressCallback + }); + } + /** * Main entry point for handling operations */ @@ -50,15 +103,15 @@ export abstract class ResourceHandler { switch (operation) { case 'list': - return this.handleList(args as ListOperationArgs); + return this.applyEnhancements('list', await this.handleList(args as ListOperationArgs)); case 'get': - return this.handleGet(args as GetOperationArgs); + return this.applyEnhancements('get', await this.handleGet(args as GetOperationArgs)); case 'create': - return this.handleCreate(args as CreateOperationArgs); + return this.applyEnhancements('create', await this.handleCreate(args as CreateOperationArgs)); case 'update': - return this.handleUpdate(args as UpdateOperationArgs); + return this.applyEnhancements('update', await this.handleUpdate(args as UpdateOperationArgs)); case 'delete': - return this.handleDelete(args as DeleteOperationArgs); + return this.applyEnhancements('delete', await this.handleDelete(args as DeleteOperationArgs)); default: throw new McpError( ErrorCode.InvalidParams, @@ -67,6 +120,14 @@ export abstract class ResourceHandler { } } + private applyEnhancements( + operation: OperationType, + result: OperationResult + ): OperationResult { + this.enhanceResult(operation, result); + return result; + } + /** * Abstract methods that must be implemented by subclasses */ @@ -76,6 +137,11 @@ export abstract class ResourceHandler { protected abstract handleUpdate(args: UpdateOperationArgs): Promise>; protected abstract handleDelete(args: DeleteOperationArgs): Promise>; + protected enhanceResult(operation: OperationType, result: OperationResult): void { + void operation; + void result; + } + /** * Resolve resource ID from args or session context */ @@ -86,8 +152,8 @@ export abstract class ResourceHandler { } // Try to resolve from session context - const lastCreatedKey = `lastCreated${this.capitalizeFirst(this.config.resourceName)}`; - const lastKey = `last${this.capitalizeFirst(this.config.resourceName)}`; + const lastCreatedKey = `lastCreated${capitalizeFirst(this.config.resourceName)}`; + const lastKey = `last${capitalizeFirst(this.config.resourceName)}`; // Check for last created resource if (this.sessionContext.variables[lastCreatedKey]) { @@ -115,7 +181,7 @@ export abstract class ResourceHandler { * Store result in session context with appropriate keys */ protected storeInSession(operation: OperationType, result: OperationResult): void { - const resourceName = this.capitalizeFirst(this.config.resourceName); + const resourceName = capitalizeFirst(this.config.resourceName); switch (operation) { case 'list': @@ -156,11 +222,5 @@ export abstract class ResourceHandler { } } - /** - * Helper to capitalize first letter - */ - private capitalizeFirst(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1); - } } diff --git a/src/resources/collector/CollectorHandler.ts b/src/resources/collector/collectorHandler.ts similarity index 95% rename from src/resources/collector/CollectorHandler.ts rename to src/resources/collector/collectorHandler.ts index 9a36fa3..0fbac0f 100644 --- a/src/resources/collector/CollectorHandler.ts +++ b/src/resources/collector/collectorHandler.ts @@ -3,7 +3,7 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; @@ -16,7 +16,7 @@ import type { DeleteOperationArgs, OperationResult } from '../../types/operations.js'; -import { validateListCollectors } from './collectorSchemas.js'; +import { validateListCollectors } from './collectorZodSchemas.js'; export class CollectorHandler extends ResourceHandler { constructor(client: LogicMonitorClient, sessionManager: SessionManager, sessionId?: string) { diff --git a/src/resources/collector/collectorSchemas.ts b/src/resources/collector/collectorSchemas.ts deleted file mode 100644 index 57a33d8..0000000 --- a/src/resources/collector/collectorSchemas.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Collector validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -export function validateListCollectors(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/collector/collectorZodSchemas.ts b/src/resources/collector/collectorZodSchemas.ts new file mode 100644 index 0000000..c62fca5 --- /dev/null +++ b/src/resources/collector/collectorZodSchemas.ts @@ -0,0 +1,37 @@ +/** + * Collector Zod validation schemas + * Migrated from Joi schemas in collectorSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// List operation schema - matches Joi validation exactly +export const CollectorListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Collector only supports list operation (read-only) +export const CollectorOperationArgsSchema = CollectorListArgsSchema; + +// Type exports +export type CollectorListArgs = z.infer; +export type CollectorOperationArgs = z.infer; + +// Validation helper function that matches the Joi API +export function validateListCollectors(args: unknown) { + const result = CollectorListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/collectorGroup/CollectorGroupHandler.ts b/src/resources/collectorGroup/collectorGroupHandler.ts similarity index 96% rename from src/resources/collectorGroup/CollectorGroupHandler.ts rename to src/resources/collectorGroup/collectorGroupHandler.ts index 74d58f0..dd76133 100644 --- a/src/resources/collectorGroup/CollectorGroupHandler.ts +++ b/src/resources/collectorGroup/collectorGroupHandler.ts @@ -4,11 +4,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMCollectorGroup } from '../../types/logicmonitor.js'; @@ -27,7 +26,7 @@ import { validateCreateCollectorGroup, validateUpdateCollectorGroup, validateDeleteCollectorGroup -} from './collectorGroupSchemas.js'; +} from './collectorGroupZodSchemas.js'; export class CollectorGroupHandler extends ResourceHandler { constructor( @@ -130,10 +129,11 @@ export class CollectorGroupHandler extends ResourceHandler { protected async handleCreate(args: CreateOperationArgs): Promise> { const validated = validateCreateCollectorGroup(args); const isBatch = this.isBatchCreate(validated); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); const groupsInput = this.normalizeCreateInput(validated); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( groupsInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (groupPayload) => this.client.createCollectorGroup(groupPayload as any), @@ -208,7 +208,7 @@ export class CollectorGroupHandler extends ResourceHandler { BatchOperationResolver.validateBatchSafety(resolution, 'update'); const updates = validated.updates || {}; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( resolution.items, async (group: Record) => { const groupId = group.id ?? group.groupId; @@ -257,7 +257,7 @@ export class CollectorGroupHandler extends ResourceHandler { throw new McpError(ErrorCode.InvalidParams, 'Collector group ID must be a number'); } - const updates = { ...validated }; + const updates: Record = { ...validated }; delete updates.operation; delete updates.id; delete updates.groupId; @@ -301,7 +301,7 @@ export class CollectorGroupHandler extends ResourceHandler { itemsToDelete = resolution.items; } - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( itemsToDelete, async (group: Record) => { const groupId = group.id ?? group.groupId; diff --git a/src/resources/collectorGroup/collectorGroupSchemas.ts b/src/resources/collectorGroup/collectorGroupSchemas.ts deleted file mode 100644 index 117185c..0000000 --- a/src/resources/collectorGroup/collectorGroupSchemas.ts +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Collector Group validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const customPropertySchema = Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() -}); - -const singleCollectorGroupSchema = Joi.object({ - name: Joi.string().required(), - description: Joi.string().required(), - autoBalance: Joi.boolean().optional(), - autoBalanceInstanceCountThreshold: Joi.number().optional(), - customProperties: Joi.array().items(customPropertySchema).optional() -}).unknown(true); - -const singleUpdateCollectorGroupSchema = Joi.object({ - groupId: Joi.number().optional(), - id: Joi.number().optional(), - name: Joi.string().optional(), - description: Joi.string().optional(), - autoBalance: Joi.boolean().optional(), - autoBalanceInstanceCountThreshold: Joi.number().optional(), - customProperties: Joi.array().items(customPropertySchema).optional() -}).unknown(true); - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListCollectorGroups(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetCollectorGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateCollectorGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - // Single collector group properties - name: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - autoBalance: Joi.boolean().optional(), - autoBalanceInstanceCountThreshold: Joi.number().optional(), - customProperties: Joi.array().items(customPropertySchema).optional(), - // Batch properties - groups: Joi.array().items(singleCollectorGroupSchema).optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateCollectorGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - // Update fields - name: Joi.string().optional(), - description: Joi.string().optional(), - autoBalance: Joi.boolean().optional(), - autoBalanceInstanceCountThreshold: Joi.number().optional(), - customProperties: Joi.array().items(customPropertySchema).optional(), - // Batch properties - groups: Joi.array().items(singleUpdateCollectorGroupSchema).optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteCollectorGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - ids: Joi.array().items(Joi.number()).optional(), - groups: Joi.array().items( - Joi.object({ - id: Joi.number().required() - }).unknown(true) - ).optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/collectorGroup/collectorGroupZodSchemas.ts b/src/resources/collectorGroup/collectorGroupZodSchemas.ts new file mode 100644 index 0000000..55191ff --- /dev/null +++ b/src/resources/collectorGroup/collectorGroupZodSchemas.ts @@ -0,0 +1,173 @@ +/** + * Collector Group Zod validation schemas + * Migrated from Joi schemas in collectorGroupSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const propertySchema = z.object({ + name: z.string(), + value: z.string() +}); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single group create schema +const singleGroupSchema = z.object({ + name: z.string(), + description: z.string().optional(), + properties: z.array(propertySchema).optional(), + autoBalance: z.boolean().optional(), + autoBalanceInstanceCountThreshold: z.number().optional() +}).loose(); + +// List operation schema +export const CollectorGroupListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Get operation schema +export const CollectorGroupGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + groupId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +export const CollectorGroupCreateArgsSchema = z.object({ + operation: z.literal('create'), + name: z.string().optional(), + description: z.string().optional(), + properties: z.array(propertySchema).optional(), + customProperties: z.array(propertySchema).optional(), + autoBalance: z.boolean().optional(), + autoBalanceInstanceCountThreshold: z.number().optional(), + groups: z.array(singleGroupSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() +.superRefine((data, ctx) => { + // If not using groups array, require name + if (!data.groups && !data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when groups is not provided', + path: ['name'] + }); + } +}); + +// Update operation schema +export const CollectorGroupUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + groupId: z.number().optional(), + name: z.string().optional(), + description: z.string().optional(), + properties: z.array(propertySchema).optional(), + customProperties: z.array(propertySchema).optional(), + autoBalance: z.boolean().optional(), + autoBalanceInstanceCountThreshold: z.number().optional(), + groups: z.array(z.any()).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); + +// Delete operation schema +export const CollectorGroupDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + groupId: z.number().optional(), + ids: z.array(z.number()).optional(), + groups: z.array(z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const CollectorGroupOperationArgsSchema = z.discriminatedUnion('operation', [ + CollectorGroupListArgsSchema, + CollectorGroupGetArgsSchema, + CollectorGroupCreateArgsSchema, + CollectorGroupUpdateArgsSchema, + CollectorGroupDeleteArgsSchema +]); + +// Type exports +export type CollectorGroupListArgs = z.infer; +export type CollectorGroupGetArgs = z.infer; +export type CollectorGroupCreateArgs = z.infer; +export type CollectorGroupUpdateArgs = z.infer; +export type CollectorGroupDeleteArgs = z.infer; +export type CollectorGroupOperationArgs = z.infer; + +// Validation helper functions +export function validateListCollectorGroups(args: unknown) { + const result = CollectorGroupListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetCollectorGroup(args: unknown) { + const result = CollectorGroupGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateCollectorGroup(args: unknown) { + const result = CollectorGroupCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateCollectorGroup(args: unknown) { + const result = CollectorGroupUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteCollectorGroup(args: unknown) { + const result = CollectorGroupDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/dashboard/DashboardHandler.ts b/src/resources/dashboard/dashboardHandler.ts similarity index 77% rename from src/resources/dashboard/DashboardHandler.ts rename to src/resources/dashboard/dashboardHandler.ts index 8c46d53..343fd1e 100644 --- a/src/resources/dashboard/DashboardHandler.ts +++ b/src/resources/dashboard/dashboardHandler.ts @@ -4,11 +4,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMDashboard } from '../../types/logicmonitor.js'; @@ -18,16 +17,12 @@ import type { CreateOperationArgs, UpdateOperationArgs, DeleteOperationArgs, - OperationResult + OperationResult, + OperationType } from '../../types/operations.js'; import type { BatchResult, BatchItem } from '../../utils/batchProcessor.js'; -import { - validateListDashboards, - validateGetDashboard, - validateCreateDashboard, - validateUpdateDashboard, - validateDeleteDashboard -} from './dashboardSchemas.js'; +import { validateDashboardOperation } from './dashboardZodSchemas.js'; +import { getDashboardLink } from '../../utils/resourceLinks.js'; export class DashboardHandler extends ResourceHandler { constructor( @@ -48,7 +43,7 @@ export class DashboardHandler extends ResourceHandler { } protected async handleList(args: ListOperationArgs): Promise> { - const validated = validateListDashboards(args); + const validated = validateDashboardOperation(args) as Extract, { operation: 'list' }>; const { fields, filter, size, offset, autoPaginate } = validated; const fieldConfig = sanitizeFields('dashboard', fields); @@ -88,7 +83,7 @@ export class DashboardHandler extends ResourceHandler { } protected async handleGet(args: GetOperationArgs): Promise> { - const validated = validateGetDashboard(args); + const validated = validateDashboardOperation(args) as Extract, { operation: 'get' }>; const dashboardId = validated.id ?? this.resolveId(validated); if (typeof dashboardId !== 'number') { @@ -128,12 +123,13 @@ export class DashboardHandler extends ResourceHandler { } protected async handleCreate(args: CreateOperationArgs): Promise> { - const validated = validateCreateDashboard(args); + const validated = validateDashboardOperation(args) as Extract, { operation: 'create' }>; const isBatch = this.isBatchCreate(validated); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); const dashboardsInput = this.normalizeCreateInput(validated); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( dashboardsInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (dashboardPayload) => this.client.createDashboard(dashboardPayload as any), @@ -191,9 +187,10 @@ export class DashboardHandler extends ResourceHandler { } protected async handleUpdate(args: UpdateOperationArgs): Promise> { - const validated = validateUpdateDashboard(args); + const validated = validateDashboardOperation(args) as Extract, { operation: 'update' }>; const isBatch = BatchOperationResolver.isBatchOperation(validated, 'dashboards'); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); if (isBatch) { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -208,7 +205,7 @@ export class DashboardHandler extends ResourceHandler { BatchOperationResolver.validateBatchSafety(resolution, 'update'); const updates = validated.updates || {}; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( resolution.items, async (dashboard: Record) => { const dashboardId = dashboard.id ?? dashboard.dashboardId; @@ -257,7 +254,7 @@ export class DashboardHandler extends ResourceHandler { throw new McpError(ErrorCode.InvalidParams, 'Dashboard ID must be a number'); } - const updates = { ...validated }; + const updates: Record = { ...validated }; delete updates.operation; delete updates.id; delete updates.dashboardId; @@ -278,10 +275,11 @@ export class DashboardHandler extends ResourceHandler { } protected async handleDelete(args: DeleteOperationArgs): Promise> { - const validated = validateDeleteDashboard(args); + const validated = validateDashboardOperation(args) as Extract, { operation: 'delete' }>; const isBatch = BatchOperationResolver.isBatchOperation(validated, 'dashboards') || (validated.ids && Array.isArray(validated.ids)); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); if (isBatch) { let itemsToDelete: Array>; @@ -301,7 +299,7 @@ export class DashboardHandler extends ResourceHandler { itemsToDelete = resolution.items; } - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( itemsToDelete, async (dashboard: Record) => { const dashboardId = dashboard.id ?? dashboard.dashboardId; @@ -354,6 +352,11 @@ export class DashboardHandler extends ResourceHandler { return result; } + protected override enhanceResult(operation: OperationType, result: OperationResult): void { + super.enhanceResult(operation, result); + this.attachDashboardLinks(result); + } + private isBatchCreate(args: Record): boolean { return !!(args.dashboards && Array.isArray(args.dashboards)); } @@ -379,5 +382,67 @@ export class DashboardHandler extends ResourceHandler { raw: entry.raw })); } + + protected resolveId(args: Record): number { + const id = (args.id ?? args.dashboardId) as number | undefined; + if (!id) { + throw new McpError(ErrorCode.InvalidParams, 'Dashboard ID is required'); + } + return id; + } + + private attachDashboardLinks(result: OperationResult): void { + if (result.data) { + this.addLinkToDashboard(result.data as unknown as Record); + } + if (Array.isArray(result.items)) { + result.items.forEach(item => + this.addLinkToDashboard(item as unknown as Record) + ); + } + } + + private addLinkToDashboard(dashboard: Record | undefined): void { + if (!dashboard) { + return; + } + try { + const dashboardId = dashboard.id ?? dashboard.dashboardId; + if (dashboardId === null || typeof dashboardId === 'undefined') { + return; + } + const groupIds = this.parseGroupIds(dashboard.groupId ?? dashboard.groupIds); + dashboard.linkUrl = getDashboardLink({ + company: this.client.getAccount(), + dashboardId: dashboardId as number | string, + groupIds + }); + } catch { + // Ignore link generation failures + } + } + + private parseGroupIds(value: unknown): Array | undefined { + if (!value) { + return undefined; + } + if (Array.isArray(value)) { + const filtered = value + .map(entry => (typeof entry === 'number' || typeof entry === 'string' ? entry : undefined)) + .filter((entry): entry is number | string => typeof entry !== 'undefined'); + return filtered.length ? filtered : undefined; + } + if (typeof value === 'string') { + const parts = value + .split(',') + .map(part => part.trim()) + .filter(Boolean); + return parts.length ? parts : undefined; + } + if (typeof value === 'number') { + return [value]; + } + return undefined; + } } diff --git a/src/resources/dashboard/dashboardSchemas.ts b/src/resources/dashboard/dashboardSchemas.ts deleted file mode 100644 index 393efe8..0000000 --- a/src/resources/dashboard/dashboardSchemas.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Dashboard validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const widgetTokenSchema = Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() -}); - -const singleDashboardSchema = Joi.object({ - name: Joi.string().required(), - groupId: Joi.number().required(), - description: Joi.string().optional(), - widgetsConfig: Joi.string().optional(), - widgetTokens: Joi.array().items(widgetTokenSchema).optional(), - template: Joi.boolean().optional(), - sharable: Joi.boolean().optional() -}).unknown(true); - -const singleUpdateDashboardSchema = Joi.object({ - dashboardId: Joi.number().optional(), - id: Joi.number().optional(), - name: Joi.string().optional(), - groupId: Joi.number().optional(), - description: Joi.string().optional(), - widgetsConfig: Joi.string().optional(), - widgetTokens: Joi.array().items(widgetTokenSchema).optional(), - template: Joi.boolean().optional(), - sharable: Joi.boolean().optional() -}).unknown(true); - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListDashboards(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetDashboard(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - dashboardId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateDashboard(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - // Single dashboard properties - name: Joi.string().when('dashboards', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - groupId: Joi.number().when('dashboards', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - widgetsConfig: Joi.string().optional(), - widgetTokens: Joi.array().items(widgetTokenSchema).optional(), - template: Joi.boolean().optional(), - sharable: Joi.boolean().optional(), - // Batch properties - dashboards: Joi.array().items(singleDashboardSchema).optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateDashboard(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - dashboardId: Joi.number().optional(), - // Update fields - name: Joi.string().optional(), - groupId: Joi.number().optional(), - description: Joi.string().optional(), - widgetsConfig: Joi.string().optional(), - widgetTokens: Joi.array().items(widgetTokenSchema).optional(), - template: Joi.boolean().optional(), - sharable: Joi.boolean().optional(), - // Batch properties - dashboards: Joi.array().items(singleUpdateDashboardSchema).optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteDashboard(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - dashboardId: Joi.number().optional(), - ids: Joi.array().items(Joi.number()).optional(), - dashboards: Joi.array().items( - Joi.object({ - id: Joi.number().required() - }).unknown(true) - ).optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/dashboard/dashboardZodSchemas.ts b/src/resources/dashboard/dashboardZodSchemas.ts new file mode 100644 index 0000000..74a3909 --- /dev/null +++ b/src/resources/dashboard/dashboardZodSchemas.ts @@ -0,0 +1,141 @@ +/** + * Dashboard Zod validation schemas + * Migrated from Joi schemas in dashboardSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const widgetTokenSchema = z.object({ + name: z.string(), + value: z.string() +}); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single dashboard create schema +const singleDashboardSchema = z.object({ + name: z.string(), + groupId: z.number(), + description: z.string().optional(), + widgetsConfig: z.string().optional(), + widgetTokens: z.array(widgetTokenSchema).optional(), + template: z.boolean().optional(), + sharable: z.boolean().optional() +}).loose(); + +// List operation schema +export const DashboardListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Get operation schema +export const DashboardGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + dashboardId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +export const DashboardCreateArgsSchema = z.object({ + operation: z.literal('create'), + name: z.string().optional(), + groupId: z.number().optional(), + description: z.string().optional(), + widgetsConfig: z.string().optional(), + widgetTokens: z.array(widgetTokenSchema).optional(), + template: z.boolean().optional(), + sharable: z.boolean().optional(), + dashboards: z.array(singleDashboardSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() +.superRefine((data, ctx) => { + // If not using dashboards array, require single dashboard fields + if (!data.dashboards) { + if (!data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when dashboards is not provided', + path: ['name'] + }); + } + if (!data.groupId) { + ctx.addIssue({ + code: 'custom', + message: 'groupId is required when dashboards is not provided', + path: ['groupId'] + }); + } + } +}); + +// Update operation schema +export const DashboardUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + dashboardId: z.number().optional(), + name: z.string().optional(), + description: z.string().optional(), + widgetsConfig: z.string().optional(), + widgetTokens: z.array(widgetTokenSchema).optional(), + template: z.boolean().optional(), + sharable: z.boolean().optional(), + dashboards: z.array(z.any()).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); + +// Delete operation schema +export const DashboardDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + dashboardId: z.number().optional(), + ids: z.array(z.number()).optional(), + dashboards: z.array(z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const DashboardOperationArgsSchema = z.discriminatedUnion('operation', [ + DashboardListArgsSchema, + DashboardGetArgsSchema, + DashboardCreateArgsSchema, + DashboardUpdateArgsSchema, + DashboardDeleteArgsSchema +]); + +// Type exports +export type DashboardListArgs = z.infer; +export type DashboardGetArgs = z.infer; +export type DashboardCreateArgs = z.infer; +export type DashboardUpdateArgs = z.infer; +export type DashboardDeleteArgs = z.infer; +export type DashboardOperationArgs = z.infer; + +// Validation helper function +export function validateDashboardOperation(args: unknown): DashboardOperationArgs { + const result = DashboardOperationArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/device/DeviceHandler.ts b/src/resources/device/deviceHandler.ts similarity index 88% rename from src/resources/device/DeviceHandler.ts rename to src/resources/device/deviceHandler.ts index 009e1ca..7cb30e0 100644 --- a/src/resources/device/DeviceHandler.ts +++ b/src/resources/device/deviceHandler.ts @@ -4,11 +4,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMDevice } from '../../types/logicmonitor.js'; @@ -18,7 +17,8 @@ import type { CreateOperationArgs, UpdateOperationArgs, DeleteOperationArgs, - OperationResult + OperationResult, + OperationType } from '../../types/operations.js'; import type { BatchResult, BatchItem } from '../../utils/batchProcessor.js'; import { @@ -27,7 +27,8 @@ import { validateCreateDevice, validateUpdateDevice, validateDeleteDevice -} from './deviceSchemas.js'; +} from './deviceZodSchemas.js'; +import { getDeviceLink } from '../../utils/resourceLinks.js'; export class DeviceHandler extends ResourceHandler { constructor( @@ -48,7 +49,7 @@ export class DeviceHandler extends ResourceHandler { } protected async handleList(args: ListOperationArgs): Promise> { - const validated = validateListDevices(args); + const validated = validateListDevices({ ...args, operation: 'list' as const }); const { fields, filter, size, offset, autoPaginate, start, end, netflowFilter, includeDeletedResources } = validated; const fieldConfig = sanitizeFields('device', fields); @@ -85,6 +86,7 @@ export class DeviceHandler extends ResourceHandler { raw: apiResult.raw }; + this.attachDeviceLinks(result); this.storeInSession('list', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'list', result); @@ -137,6 +139,7 @@ export class DeviceHandler extends ResourceHandler { raw: apiResult.raw }; + this.attachDeviceLinks(result); this.storeInSession('get', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'get', result); this.sessionManager.cacheResource(this.sessionContext.id, 'device', deviceId, apiResult.data); @@ -147,10 +150,11 @@ export class DeviceHandler extends ResourceHandler { protected async handleCreate(args: CreateOperationArgs): Promise> { const validated = validateCreateDevice(args); const isBatch = this.isBatchCreate(validated); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); const devicesInput = this.normalizeCreateInput(validated); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( devicesInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (devicePayload) => this.client.createDevice(devicePayload as any), @@ -177,6 +181,7 @@ export class DeviceHandler extends ResourceHandler { meta: entry.meta ?? undefined }; + this.attachDeviceLinks(result); this.storeInSession('create', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'create', result); this.sessionManager.cacheResource(this.sessionContext.id, 'device', createdDevice.id, createdDevice); @@ -201,6 +206,7 @@ export class DeviceHandler extends ResourceHandler { results: normalized }; + this.attachDeviceLinks(result); this.storeInSession('create', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'create', result); @@ -235,6 +241,7 @@ export class DeviceHandler extends ResourceHandler { meta: apiResult.meta }; + this.attachDeviceLinks(result); this.storeInSession('update', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'update', result); this.sessionManager.cacheResource(this.sessionContext.id, 'device', deviceId, apiResult.data); @@ -298,7 +305,7 @@ export class DeviceHandler extends ResourceHandler { payload: args.updates || this.buildUpdatePayload(item as unknown as Record) })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( updateOps, async ({ deviceId, payload }) => this.client.updateDevice(deviceId as number, payload), { @@ -326,6 +333,7 @@ export class DeviceHandler extends ResourceHandler { results: normalized }; + this.attachDeviceLinks(result); this.storeInSession('update', result); this.sessionManager.recordOperation(this.sessionContext.id, 'device', 'update', result); @@ -355,7 +363,7 @@ export class DeviceHandler extends ResourceHandler { deviceId: (item as Record).deviceId || item.id })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( deviceIds, async ({ deviceId }) => this.client.deleteDevice(deviceId), { @@ -385,9 +393,41 @@ export class DeviceHandler extends ResourceHandler { return result; } + protected override enhanceResult(operation: OperationType, result: OperationResult): void { + super.enhanceResult(operation, result); + this.attachDeviceLinks(result); + } + /** * Helper methods */ + private attachDeviceLinks(result: OperationResult): void { + if (result.data) { + this.addLinkToDevice(result.data as unknown as Record); + } + if (Array.isArray(result.items)) { + result.items.forEach(item => + this.addLinkToDevice(item as unknown as Record) + ); + } + } + + private addLinkToDevice(device: Record | undefined): void { + if (!device) return; + const deviceId = device.id ?? device.deviceId; + if (deviceId === null || typeof deviceId === 'undefined') { + return; + } + try { + device.linkUrl = getDeviceLink({ + company: this.client.getAccount(), + deviceId: deviceId as number | string + }); + } catch { + // Ignore link generation errors + } + } + private isBatchCreate(args: Record): boolean { return !!(args.devices && Array.isArray(args.devices) && args.devices.length > 1); } diff --git a/src/resources/device/deviceSchemas.ts b/src/resources/device/deviceSchemas.ts deleted file mode 100644 index abdf6aa..0000000 --- a/src/resources/device/deviceSchemas.ts +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Device validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const singleDeviceSchema = Joi.object({ - displayName: Joi.string().required(), - name: Joi.string().required(), - hostGroupIds: Joi.array().items(Joi.number()).min(1).required(), - preferredCollectorId: Joi.number().required(), - disableAlerting: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -const singleUpdateDeviceSchema = Joi.object({ - deviceId: Joi.number().optional(), - id: Joi.number().optional(), - displayName: Joi.string().optional(), - hostGroupIds: Joi.array().items(Joi.number()).optional(), - disableAlerting: Joi.boolean().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListDevices(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional(), - start: Joi.number().optional(), - end: Joi.number().optional(), - netflowFilter: Joi.string().optional(), - includeDeletedResources: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetDevice(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - deviceId: Joi.number().optional(), - fields: Joi.string().optional(), - start: Joi.number().optional(), - end: Joi.number().optional(), - netflowFilter: Joi.string().optional(), - needStcGrpAndSortedCP: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateDevice(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - // Single device properties - displayName: Joi.string().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - name: Joi.string().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - hostGroupIds: Joi.array().items(Joi.number()).min(1).when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - preferredCollectorId: Joi.number().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - disableAlerting: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - // Batch properties - devices: Joi.array().items(singleDeviceSchema).min(1).optional(), - batchOptions: batchOptionsSchema - }).xor('displayName', 'devices').unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateDevice(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - // Single device update - id: Joi.number().optional(), - deviceId: Joi.number().optional(), - displayName: Joi.string().optional(), - hostGroupIds: Joi.array().items(Joi.number()).optional(), - disableAlerting: Joi.boolean().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - // Batch update properties - devices: Joi.array().items(singleUpdateDeviceSchema).min(1).optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteDevice(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - deviceId: Joi.number().optional(), - ids: Joi.array().items(Joi.number()).optional(), - devices: Joi.array().items( - Joi.object({ - deviceId: Joi.number().optional(), - id: Joi.number().optional() - }).unknown(false) - ).min(1).optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/device/deviceZodSchemas.ts b/src/resources/device/deviceZodSchemas.ts new file mode 100644 index 0000000..ccb2af2 --- /dev/null +++ b/src/resources/device/deviceZodSchemas.ts @@ -0,0 +1,245 @@ +/** + * Device Zod validation schemas + * Migrated from Joi schemas in deviceSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const propertySchema = z.object({ + name: z.string(), + value: z.string() +}).loose(); + +const customPropertySchema = z.object({ + name: z.string(), + value: z.string() +}).loose(); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single device create schema +const singleDeviceSchema = z.object({ + displayName: z.string(), + name: z.string(), + hostGroupIds: z.array(z.number()).min(1), + preferredCollectorId: z.number(), + disableAlerting: z.boolean().optional(), + properties: z.array(propertySchema).optional(), + customProperties: z.array(customPropertySchema).optional() +}).loose(); + +// Single device update schema +const singleUpdateDeviceSchema = z.object({ + deviceId: z.number().optional(), + id: z.number().optional(), + displayName: z.string().optional(), + hostGroupIds: z.array(z.number()).optional(), + disableAlerting: z.boolean().optional(), + customProperties: z.array(customPropertySchema).optional(), + properties: z.array(propertySchema).optional() +}).loose(); + +// List operation schema +export const DeviceListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional(), + start: z.number().optional(), + end: z.number().optional(), + netflowFilter: z.string().optional(), + includeDeletedResources: z.boolean().optional() +}).strict(); + +// Get operation schema +export const DeviceGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + deviceId: z.number().optional(), + fields: z.string().optional(), + start: z.number().optional(), + end: z.number().optional(), + netflowFilter: z.string().optional(), + needStcGrpAndSortedCP: z.boolean().optional() +}).strict(); + +// Create operation schema +export const DeviceCreateArgsSchema = z.object({ + operation: z.literal('create'), + displayName: z.string().optional(), + name: z.string().optional(), + hostGroupIds: z.array(z.number()).min(1).optional(), + preferredCollectorId: z.number().optional(), + disableAlerting: z.boolean().optional(), + properties: z.array(propertySchema).optional(), + customProperties: z.array(customPropertySchema).optional(), + devices: z.array(singleDeviceSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() +.superRefine((data, ctx) => { + // Must have either displayName or devices, but not both (xor) + const hasDisplayName = data.displayName !== undefined; + const hasDevices = data.devices !== undefined; + + if (hasDisplayName && hasDevices) { + ctx.addIssue({ + code: 'custom', + message: 'Cannot specify both displayName and devices', + path: ['displayName'] + }); + } + + if (!hasDisplayName && !hasDevices) { + ctx.addIssue({ + code: 'custom', + message: 'Must specify either displayName or devices', + path: ['displayName'] + }); + } + + // If not using devices array, require single device fields + if (!hasDevices) { + if (!data.displayName) { + ctx.addIssue({ + code: 'custom', + message: 'displayName is required when devices is not provided', + path: ['displayName'] + }); + } + if (!data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when devices is not provided', + path: ['name'] + }); + } + if (!data.hostGroupIds) { + ctx.addIssue({ + code: 'custom', + message: 'hostGroupIds is required when devices is not provided', + path: ['hostGroupIds'] + }); + } + if (!data.preferredCollectorId) { + ctx.addIssue({ + code: 'custom', + message: 'preferredCollectorId is required when devices is not provided', + path: ['preferredCollectorId'] + }); + } + } +}); + +// Update operation schema +export const DeviceUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + deviceId: z.number().optional(), + displayName: z.string().optional(), + hostGroupIds: z.array(z.number()).optional(), + disableAlerting: z.boolean().optional(), + customProperties: z.array(customPropertySchema).optional(), + properties: z.array(propertySchema).optional(), + devices: z.array(singleUpdateDeviceSchema).min(1).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); + +// Delete operation schema +export const DeviceDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + deviceId: z.number().optional(), + ids: z.array(z.number()).optional(), + devices: z.array(z.object({ + deviceId: z.number().optional(), + id: z.number().optional() + }).strict()).min(1).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const DeviceOperationArgsSchema = z.discriminatedUnion('operation', [ + DeviceListArgsSchema, + DeviceGetArgsSchema, + DeviceCreateArgsSchema, + DeviceUpdateArgsSchema, + DeviceDeleteArgsSchema +]); + +// Type exports +export type DeviceListArgs = z.infer; +export type DeviceGetArgs = z.infer; +export type DeviceCreateArgs = z.infer; +export type DeviceUpdateArgs = z.infer; +export type DeviceDeleteArgs = z.infer; +export type DeviceOperationArgs = z.infer; + +// Validation helper functions that match the Joi API +export function validateListDevices(args: unknown) { + const result = DeviceListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetDevice(args: unknown) { + const result = DeviceGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateDevice(args: unknown) { + const result = DeviceCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateDevice(args: unknown) { + const result = DeviceUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteDevice(args: unknown) { + const result = DeviceDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/deviceData/DeviceDataHandler.ts b/src/resources/deviceData/deviceDataHandler.ts similarity index 91% rename from src/resources/deviceData/DeviceDataHandler.ts rename to src/resources/deviceData/deviceDataHandler.ts index 05e9504..ad6baac 100644 --- a/src/resources/deviceData/DeviceDataHandler.ts +++ b/src/resources/deviceData/deviceDataHandler.ts @@ -4,23 +4,22 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import type { LMDeviceDatasource, LMDeviceDatasourceInstance, LMDeviceData, LMDeviceDataFormatted } from '../../types/logicmonitor.js'; -import type { OperationResult } from '../../types/operations.js'; +import type { OperationResult, OperationType } from '../../types/operations.js'; import type { BatchResult, BatchItem } from '../../utils/batchProcessor.js'; import { validateListDatasources, validateListInstances, validateGetData -} from './deviceDataSchemas.js'; +} from './deviceDataZodSchemas.js'; interface DeviceDataOperationArgs { operation: 'list_datasources' | 'list_instances' | 'get_data'; @@ -187,17 +186,17 @@ export class DeviceDataHandler extends ResourceHandler { let endEpoch: number; if (startDate) { - startEpoch = Math.floor(new Date(startDate).getTime() / 1000); + startEpoch = typeof startDate === 'string' ? Math.floor(new Date(startDate).getTime() / 1000) : startDate; } else if (start) { - startEpoch = start; + startEpoch = typeof start === 'string' ? Math.floor(new Date(start).getTime() / 1000) : start; } else { startEpoch = defaultStart; } if (endDate) { - endEpoch = Math.floor(new Date(endDate).getTime() / 1000); + endEpoch = typeof endDate === 'string' ? Math.floor(new Date(endDate).getTime() / 1000) : endDate; } else if (end) { - endEpoch = end; + endEpoch = typeof end === 'string' ? Math.floor(new Date(end).getTime() / 1000) : end; } else { endEpoch = now; } @@ -298,7 +297,7 @@ export class DeviceDataHandler extends ResourceHandler { aggregate })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( batchOps, async (op) => { const apiResult = await this.client.getDeviceData( @@ -425,6 +424,20 @@ export class DeviceDataHandler extends ResourceHandler { }; } + /** + * Override storeInSession to map custom operations to standard types. + * list_datasources and list_instances map to 'list'; get_data maps to 'get'. + */ + protected override storeInSession(operation: OperationType | string, result: OperationResult): void { + const operationMap: Record = { + 'list_datasources': 'list', + 'list_instances': 'list', + 'get_data': 'get' + }; + const standardOp = operationMap[operation] || (operation as OperationType); + super.storeInSession(standardOp, result); + } + // Required abstract methods from ResourceHandler protected async handleList(_args: unknown): Promise> { throw new McpError( diff --git a/src/resources/deviceData/deviceDataSchemas.ts b/src/resources/deviceData/deviceDataSchemas.ts deleted file mode 100644 index 15d262e..0000000 --- a/src/resources/deviceData/deviceDataSchemas.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Device data validation schemas for datasources, instances, and metric data - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -/** - * Validate list_datasources operation - */ -export function validateListDatasources(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list_datasources').required(), - deviceId: Joi.number().when('deviceIds', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('applyToPrevious', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('filter', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }) - }) - }), - deviceIds: Joi.array().items(Joi.number()).optional(), - filter: Joi.string().optional(), - datasourceIncludeFilter: Joi.string().optional(), - datasourceExcludeFilter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional(), - applyToPrevious: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -/** - * Validate list_instances operation - */ -export function validateListInstances(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list_instances').required(), - deviceId: Joi.number().required(), - datasourceId: Joi.number().when('datasourceIds', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('applyToPrevious', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('filter', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }) - }) - }), - datasourceIds: Joi.array().items(Joi.number()).optional(), - datasourceName: Joi.string().optional(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional(), - applyToPrevious: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -/** - * Validate get_data operation - */ -export function validateGetData(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get_data').required(), - deviceId: Joi.number().required(), - datasourceId: Joi.number().required(), - instanceId: Joi.number().when('instanceIds', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('applyToPrevious', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.when('filter', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }) - }) - }), - instanceIds: Joi.array().items(Joi.number()).optional(), - instanceName: Joi.string().optional(), - startDate: Joi.string().isoDate().optional(), - endDate: Joi.string().isoDate().optional(), - start: Joi.number().optional(), - end: Joi.number().optional(), - datapoints: Joi.alternatives().try( - Joi.string(), - Joi.array().items(Joi.string()) - ).optional(), - format: Joi.string().optional(), - aggregate: Joi.string().optional(), - filter: Joi.string().optional(), - applyToPrevious: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/deviceData/deviceDataZodSchemas.ts b/src/resources/deviceData/deviceDataZodSchemas.ts new file mode 100644 index 0000000..64388b5 --- /dev/null +++ b/src/resources/deviceData/deviceDataZodSchemas.ts @@ -0,0 +1,101 @@ +/** + * Device Data Zod validation schemas + * Migrated from Joi schemas in deviceDataSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// List datasources operation schema +export const DeviceDataListDatasourcesArgsSchema = z.object({ + operation: z.literal('list_datasources'), + deviceId: z.number(), + filter: z.string().optional(), + datasourceIncludeFilter: z.string().optional(), + datasourceExcludeFilter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// List instances operation schema +export const DeviceDataListInstancesArgsSchema = z.object({ + operation: z.literal('list_instances'), + deviceId: z.number(), + datasourceId: z.number(), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Get data operation schema +export const DeviceDataGetDataArgsSchema = z.object({ + operation: z.literal('get_data'), + deviceId: z.number(), + datasourceId: z.number(), + instanceId: z.number().optional(), + instanceIds: z.array(z.number()).optional(), + datapoints: z.array(z.string()).optional(), + start: z.union([z.number(), z.string()]).optional(), + startDate: z.union([z.number(), z.string()]).optional(), + end: z.union([z.number(), z.string()]).optional(), + endDate: z.union([z.number(), z.string()]).optional(), + aggregate: z.enum(['none', 'avg', 'sum', 'min', 'max']).optional(), + format: z.string().optional(), + batchOptions: z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() + }).optional() +}).strict(); + +// Combined operation schema with discriminated union +export const DeviceDataOperationArgsSchema = z.discriminatedUnion('operation', [ + DeviceDataListDatasourcesArgsSchema, + DeviceDataListInstancesArgsSchema, + DeviceDataGetDataArgsSchema +]); + +// Type exports +export type DeviceDataListDatasourcesArgs = z.infer; +export type DeviceDataListInstancesArgs = z.infer; +export type DeviceDataGetDataArgs = z.infer; +export type DeviceDataOperationArgs = z.infer; + +// Validation helper functions +export function validateListDatasources(args: unknown) { + const result = DeviceDataListDatasourcesArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateListInstances(args: unknown) { + const result = DeviceDataListInstancesArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetData(args: unknown) { + const result = DeviceDataGetDataArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/deviceGroup/DeviceGroupHandler.ts b/src/resources/deviceGroup/deviceGroupHandler.ts similarity index 96% rename from src/resources/deviceGroup/DeviceGroupHandler.ts rename to src/resources/deviceGroup/deviceGroupHandler.ts index 13cb059..f06effd 100644 --- a/src/resources/deviceGroup/DeviceGroupHandler.ts +++ b/src/resources/deviceGroup/deviceGroupHandler.ts @@ -3,11 +3,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMDeviceGroup } from '../../types/logicmonitor.js'; @@ -25,7 +24,7 @@ import { validateCreateDeviceGroup, validateUpdateDeviceGroup, validateDeleteDeviceGroup -} from './deviceGroupSchemas.js'; +} from './deviceGroupZodSchemas.js'; export class DeviceGroupHandler extends ResourceHandler { constructor( @@ -129,11 +128,12 @@ export class DeviceGroupHandler extends ResourceHandler { const validated = validateCreateDeviceGroup(args); // eslint-disable-next-line @typescript-eslint/no-explicit-any const isBatch = !!((validated as any).groups && Array.isArray((validated as any).groups)); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); // eslint-disable-next-line @typescript-eslint/no-explicit-any const groupsInput = isBatch ? (validated as any).groups : [validated]; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( groupsInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (group: Record) => this.client.createDeviceGroup(group as any), @@ -256,7 +256,7 @@ export class DeviceGroupHandler extends ResourceHandler { updates: args.updates || item })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( updateOps, async ({ groupId, updates }) => this.client.updateDeviceGroup(groupId, updates), { @@ -298,7 +298,7 @@ export class DeviceGroupHandler extends ResourceHandler { deleteChildren: (args as any).deleteChildren ?? false })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( deleteOps, async ({ groupId, deleteChildren }) => this.client.deleteDeviceGroup(groupId, { deleteChildren }), { diff --git a/src/resources/deviceGroup/deviceGroupSchemas.ts b/src/resources/deviceGroup/deviceGroupSchemas.ts deleted file mode 100644 index bd8ee46..0000000 --- a/src/resources/deviceGroup/deviceGroupSchemas.ts +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Device Group validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListDeviceGroups(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional(), - parentId: Joi.number().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetDeviceGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateDeviceGroup(args: unknown) { - const singleGroupSchema = Joi.object({ - name: Joi.string().required(), - parentId: Joi.number().required(), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() - }).unknown(true); - - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - name: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - parentId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - groups: Joi.array().items(singleGroupSchema).min(1).optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateDeviceGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - name: Joi.string().optional(), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - groups: Joi.array().optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteDeviceGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - deleteChildren: Joi.boolean().optional(), - groups: Joi.array().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/deviceGroup/deviceGroupZodSchemas.ts b/src/resources/deviceGroup/deviceGroupZodSchemas.ts new file mode 100644 index 0000000..8d8426d --- /dev/null +++ b/src/resources/deviceGroup/deviceGroupZodSchemas.ts @@ -0,0 +1,180 @@ +/** + * Device Group Zod validation schemas + * Migrated from Joi schemas in deviceGroupSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const customPropertySchema = z.object({ + name: z.string(), + value: z.string() +}); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// List operation schema +export const DeviceGroupListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional(), + parentId: z.number().optional() +}).strict(); + +// Get operation schema +export const DeviceGroupGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + groupId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +const singleGroupCreateSchema = z.object({ + name: z.string(), + parentId: z.number(), + description: z.string().optional(), + appliesTo: z.string().optional(), + customProperties: z.array(customPropertySchema).optional() +}).loose(); // Allow unknown properties like Joi's unknown(true) + +export const DeviceGroupCreateArgsSchema = z.object({ + operation: z.literal('create'), + name: z.string().optional(), + parentId: z.number().optional(), + description: z.string().optional(), + appliesTo: z.string().optional(), + customProperties: z.array(customPropertySchema).optional(), + groups: z.array(singleGroupCreateSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() // Allow unknown properties +.superRefine((data, ctx) => { + // If groups is provided, name and parentId are optional + // If groups is not provided, name and parentId are required + if (!data.groups) { + if (!data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when groups is not provided', + path: ['name'] + }); + } + if (!data.parentId) { + ctx.addIssue({ + code: 'custom', + message: 'parentId is required when groups is not provided', + path: ['parentId'] + }); + } + } +}); + +// Update operation schema +export const DeviceGroupUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + groupId: z.number().optional(), + name: z.string().optional(), + description: z.string().optional(), + appliesTo: z.string().optional(), + customProperties: z.array(customPropertySchema).optional(), + groups: z.array(z.any()).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); // Allow unknown properties + +// Delete operation schema +export const DeviceGroupDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + groupId: z.number().optional(), + deleteChildren: z.boolean().optional(), + groups: z.array(z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const DeviceGroupOperationArgsSchema = z.discriminatedUnion('operation', [ + DeviceGroupListArgsSchema, + DeviceGroupGetArgsSchema, + DeviceGroupCreateArgsSchema, + DeviceGroupUpdateArgsSchema, + DeviceGroupDeleteArgsSchema +]); + +// Type exports +export type DeviceGroupListArgs = z.infer; +export type DeviceGroupGetArgs = z.infer; +export type DeviceGroupCreateArgs = z.infer; +export type DeviceGroupUpdateArgs = z.infer; +export type DeviceGroupDeleteArgs = z.infer; +export type DeviceGroupOperationArgs = z.infer; + +// Validation helper functions that match the Joi API +export function validateListDeviceGroups(args: unknown) { + const result = DeviceGroupListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetDeviceGroup(args: unknown) { + const result = DeviceGroupGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateDeviceGroup(args: unknown) { + const result = DeviceGroupCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateDeviceGroup(args: unknown) { + const result = DeviceGroupUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteDeviceGroup(args: unknown) { + const result = DeviceGroupDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/session/SessionHandler.ts b/src/resources/session/sessionHandler.ts similarity index 87% rename from src/resources/session/SessionHandler.ts rename to src/resources/session/sessionHandler.ts index 2f1c264..e1fe6b8 100644 --- a/src/resources/session/SessionHandler.ts +++ b/src/resources/session/sessionHandler.ts @@ -3,8 +3,7 @@ * Handles session context operations (list history, get context, set/update variables, clear) */ -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { LogicMonitorClient } from '../../api/client.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; import { SessionManager, SessionScope } from '../../session/sessionManager.js'; import type { ListOperationArgs, @@ -14,13 +13,7 @@ import type { DeleteOperationArgs, OperationResult } from '../../types/operations.js'; -import { - validateListSession, - validateGetSession, - validateCreateSession, - validateUpdateSession, - validateDeleteSession -} from './sessionSchemas.js'; +import { validateSessionOperation } from './sessionZodSchemas.js'; interface SessionData { sessionId?: string; @@ -53,7 +46,6 @@ interface SessionData { export class SessionHandler extends ResourceHandler { constructor( - client: LogicMonitorClient, sessionManager: SessionManager, sessionId?: string ) { @@ -63,7 +55,7 @@ export class SessionHandler extends ResourceHandler { resourceName: 'session', idField: 'sessionId' }, - client, + undefined, sessionManager, sessionId ); @@ -74,7 +66,7 @@ export class SessionHandler extends ResourceHandler { * Maps to old lm_list_session_history */ protected async handleList(args: ListOperationArgs): Promise> { - const validated = validateListSession(args); + const validated = validateSessionOperation(args) as Extract, { operation: 'list' }>; const { limit } = validated; const snapshot = this.sessionManager.getSnapshot(this.sessionContext.id, { @@ -102,7 +94,7 @@ export class SessionHandler extends ResourceHandler { * Maps to old lm_get_session_context and lm_get_session_variable */ protected async handleGet(args: GetOperationArgs): Promise> { - const validated = validateGetSession(args); + const validated = validateSessionOperation(args) as Extract, { operation: 'get' }>; const { key, historyLimit, includeResults } = validated; // If key is provided, get specific variable @@ -162,7 +154,7 @@ export class SessionHandler extends ResourceHandler { * Maps to old lm_set_session_variable */ protected async handleCreate(args: CreateOperationArgs): Promise> { - const validated = validateCreateSession(args); + const validated = validateSessionOperation(args) as Extract, { operation: 'create' }>; const { key, value } = validated; const context = this.sessionManager.setVariable(this.sessionContext.id, key, value); @@ -188,7 +180,7 @@ export class SessionHandler extends ResourceHandler { * Maps to old lm_set_session_variable (same behavior as create) */ protected async handleUpdate(args: UpdateOperationArgs): Promise> { - const validated = validateUpdateSession(args); + const validated = validateSessionOperation(args) as Extract, { operation: 'update' }>; const { key, value } = validated; const context = this.sessionManager.setVariable(this.sessionContext.id, key, value); @@ -214,7 +206,7 @@ export class SessionHandler extends ResourceHandler { * Maps to old lm_clear_session_context */ protected async handleDelete(args: DeleteOperationArgs): Promise> { - const validated = validateDeleteSession(args); + const validated = validateSessionOperation(args) as Extract, { operation: 'delete' }>; const { scope } = validated; const updatedContext = this.sessionManager.clear( diff --git a/src/resources/session/sessionSchemas.ts b/src/resources/session/sessionSchemas.ts deleted file mode 100644 index e3db161..0000000 --- a/src/resources/session/sessionSchemas.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Validation schemas for session operations - */ - -import Joi from 'joi'; - -/** - * Validate list session operation (list history) - */ -export function validateListSession(args: unknown): { - operation: 'list'; - limit?: number; -} { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - limit: Joi.number().integer().min(1).max(50).optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new Error(`Validation error: ${error.message}`); - } - - return value; -} - -/** - * Validate get session operation (get context or variable) - */ -export function validateGetSession(args: unknown): { - operation: 'get'; - key?: string; - historyLimit?: number; - includeResults?: boolean; -} { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - key: Joi.string().min(1).optional(), - historyLimit: Joi.number().integer().min(1).max(50).optional(), - includeResults: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new Error(`Validation error: ${error.message}`); - } - - return value; -} - -/** - * Validate create session operation (set new variable) - */ -export function validateCreateSession(args: unknown): { - operation: 'create'; - key: string; - value: unknown; -} { - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - key: Joi.string().min(1).required(), - value: Joi.any().required() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new Error(`Validation error: ${error.message}`); - } - - return value; -} - -/** - * Validate update session operation (update variable) - */ -export function validateUpdateSession(args: unknown): { - operation: 'update'; - key: string; - value: unknown; -} { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - key: Joi.string().min(1).required(), - value: Joi.any().required() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new Error(`Validation error: ${error.message}`); - } - - return value; -} - -/** - * Validate delete session operation (clear context) - */ -export function validateDeleteSession(args: unknown): { - operation: 'delete'; - scope?: 'variables' | 'history' | 'results' | 'all'; -} { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - scope: Joi.string().valid('variables', 'history', 'results', 'all').optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new Error(`Validation error: ${error.message}`); - } - - return value; -} - diff --git a/src/resources/session/sessionZodSchemas.ts b/src/resources/session/sessionZodSchemas.ts new file mode 100644 index 0000000..7bf24b7 --- /dev/null +++ b/src/resources/session/sessionZodSchemas.ts @@ -0,0 +1,75 @@ +/** + * Session Zod validation schemas + * Migrated from Joi schemas in sessionSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// List operation schema (get history) +export const SessionListArgsSchema = z.object({ + operation: z.literal('list'), + limit: z.number().min(1).max(50).optional() +}).strict(); + +// Get operation schema (get context or variable) +export const SessionGetArgsSchema = z.object({ + operation: z.literal('get'), + key: z.string().min(1).optional(), + historyLimit: z.number().min(1).max(50).optional(), + includeResults: z.boolean().optional() +}).strict(); + +// Create operation schema (set new variable) +export const SessionCreateArgsSchema = z.object({ + operation: z.literal('create'), + key: z.string().min(1), + value: z.any().refine(val => val !== undefined, { + message: 'value is required' + }) +}).strict(); + +// Update operation schema (update variable) +export const SessionUpdateArgsSchema = z.object({ + operation: z.literal('update'), + key: z.string().min(1), + value: z.any().refine(val => val !== undefined, { + message: 'value is required' + }) +}).strict(); + +// Delete operation schema (clear context) +export const SessionDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + scope: z.enum(['variables', 'history', 'results', 'all']).optional() +}).strict(); + +// Combined operation schema with discriminated union +export const SessionOperationArgsSchema = z.discriminatedUnion('operation', [ + SessionListArgsSchema, + SessionGetArgsSchema, + SessionCreateArgsSchema, + SessionUpdateArgsSchema, + SessionDeleteArgsSchema +]); + +// Type exports +export type SessionListArgs = z.infer; +export type SessionGetArgs = z.infer; +export type SessionCreateArgs = z.infer; +export type SessionUpdateArgs = z.infer; +export type SessionDeleteArgs = z.infer; +export type SessionOperationArgs = z.infer; + +// Validation helper function +export function validateSessionOperation(args: unknown): SessionOperationArgs { + const result = SessionOperationArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/user/UserHandler.ts b/src/resources/user/userHandler.ts similarity index 96% rename from src/resources/user/UserHandler.ts rename to src/resources/user/userHandler.ts index 807f7cb..ad42c29 100644 --- a/src/resources/user/UserHandler.ts +++ b/src/resources/user/userHandler.ts @@ -4,11 +4,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMUser } from '../../types/logicmonitor.js'; @@ -27,7 +26,7 @@ import { validateCreateUser, validateUpdateUser, validateDeleteUser -} from './userSchemas.js'; +} from './userZodSchemas.js'; export class UserHandler extends ResourceHandler { constructor( @@ -130,10 +129,11 @@ export class UserHandler extends ResourceHandler { protected async handleCreate(args: CreateOperationArgs): Promise> { const validated = validateCreateUser(args); const isBatch = this.isBatchCreate(validated); - const batchOptions = BatchOperationResolver.extractBatchOptions(validated); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const batchOptions = BatchOperationResolver.extractBatchOptions(validated as any); const usersInput = this.normalizeCreateInput(validated); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( usersInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (userPayload) => this.client.createUser(userPayload as any), @@ -208,7 +208,7 @@ export class UserHandler extends ResourceHandler { BatchOperationResolver.validateBatchSafety(resolution, 'update'); const updates = validated.updates || {}; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( resolution.items, async (user: Record) => { const userId = user.id ?? user.userId; @@ -257,7 +257,7 @@ export class UserHandler extends ResourceHandler { throw new McpError(ErrorCode.InvalidParams, 'User ID must be a number'); } - const updates = { ...validated }; + const updates: Record = { ...validated }; delete updates.operation; delete updates.id; delete updates.userId; @@ -301,7 +301,7 @@ export class UserHandler extends ResourceHandler { itemsToDelete = resolution.items; } - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( itemsToDelete, async (user: Record) => { const userId = user.id ?? user.userId; diff --git a/src/resources/user/userSchemas.ts b/src/resources/user/userSchemas.ts deleted file mode 100644 index 32cbf6e..0000000 --- a/src/resources/user/userSchemas.ts +++ /dev/null @@ -1,189 +0,0 @@ -/** - * User validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const roleSchema = Joi.object({ - id: Joi.number().required() -}); - -const singleUserSchema = Joi.object({ - username: Joi.string().required(), - email: Joi.string().email().required(), - firstName: Joi.string().required(), - lastName: Joi.string().required(), - roles: Joi.array().items(roleSchema).min(1).required(), - password: Joi.string().optional(), - phone: Joi.string().optional(), - smsEmail: Joi.string().optional(), - status: Joi.string().optional(), - timezone: Joi.string().optional(), - note: Joi.string().optional(), - apionly: Joi.boolean().optional(), - forcePasswordChange: Joi.boolean().optional(), - contactMethod: Joi.string().optional() -}).unknown(true); - -const singleUpdateUserSchema = Joi.object({ - userId: Joi.number().optional(), - id: Joi.number().optional(), - username: Joi.string().optional(), - email: Joi.string().email().optional(), - firstName: Joi.string().optional(), - lastName: Joi.string().optional(), - roles: Joi.array().items(roleSchema).optional(), - phone: Joi.string().optional(), - smsEmail: Joi.string().optional(), - timezone: Joi.string().optional(), - note: Joi.string().optional(), - status: Joi.string().optional(), - forcePasswordChange: Joi.boolean().optional(), - contactMethod: Joi.string().optional() -}).unknown(true); - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListUsers(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetUser(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - userId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateUser(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - // Single user properties - username: Joi.string().when('users', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - email: Joi.string().email().when('users', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - firstName: Joi.string().when('users', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - lastName: Joi.string().when('users', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - roles: Joi.array().items(roleSchema).when('users', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - password: Joi.string().optional(), - phone: Joi.string().optional(), - smsEmail: Joi.string().optional(), - status: Joi.string().optional(), - timezone: Joi.string().optional(), - note: Joi.string().optional(), - apionly: Joi.boolean().optional(), - forcePasswordChange: Joi.boolean().optional(), - contactMethod: Joi.string().optional(), - // Batch properties - users: Joi.array().items(singleUserSchema).optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateUser(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - userId: Joi.number().optional(), - // Update fields - username: Joi.string().optional(), - email: Joi.string().email().optional(), - firstName: Joi.string().optional(), - lastName: Joi.string().optional(), - roles: Joi.array().items(roleSchema).optional(), - phone: Joi.string().optional(), - smsEmail: Joi.string().optional(), - timezone: Joi.string().optional(), - note: Joi.string().optional(), - status: Joi.string().optional(), - forcePasswordChange: Joi.boolean().optional(), - contactMethod: Joi.string().optional(), - // Batch properties - users: Joi.array().items(singleUpdateUserSchema).optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteUser(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - userId: Joi.number().optional(), - ids: Joi.array().items(Joi.number()).optional(), - users: Joi.array().items( - Joi.object({ - id: Joi.number().required() - }).unknown(true) - ).optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/user/userZodSchemas.ts b/src/resources/user/userZodSchemas.ts new file mode 100644 index 0000000..56d193b --- /dev/null +++ b/src/resources/user/userZodSchemas.ts @@ -0,0 +1,245 @@ +/** + * User Zod validation schemas + * Migrated from Joi schemas in userSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const roleSchema = z.object({ + id: z.number() +}); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single user create schema +const singleUserSchema = z.object({ + username: z.string(), + email: z.string().email(), + firstName: z.string(), + lastName: z.string(), + roles: z.array(roleSchema).min(1), + password: z.string().optional(), + phone: z.string().optional(), + smsEmail: z.string().optional(), + status: z.string().optional(), + timezone: z.string().optional(), + note: z.string().optional(), + apionly: z.boolean().optional(), + forcePasswordChange: z.boolean().optional(), + contactMethod: z.string().optional() +}).loose(); + +// Single user update schema +const singleUpdateUserSchema = z.object({ + userId: z.number().optional(), + id: z.number().optional(), + username: z.string().optional(), + email: z.string().email().optional(), + firstName: z.string().optional(), + lastName: z.string().optional(), + roles: z.array(roleSchema).optional(), + phone: z.string().optional(), + smsEmail: z.string().optional(), + timezone: z.string().optional(), + note: z.string().optional(), + status: z.string().optional(), + forcePasswordChange: z.boolean().optional(), + contactMethod: z.string().optional() +}).loose(); + +// List operation schema +export const UserListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Get operation schema +export const UserGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + userId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +export const UserCreateArgsSchema = z.object({ + operation: z.literal('create'), + username: z.string().optional(), + email: z.string().email().optional(), + firstName: z.string().optional(), + lastName: z.string().optional(), + roles: z.array(roleSchema).optional(), + password: z.string().optional(), + phone: z.string().optional(), + smsEmail: z.string().optional(), + status: z.string().optional(), + timezone: z.string().optional(), + note: z.string().optional(), + apionly: z.boolean().optional(), + forcePasswordChange: z.boolean().optional(), + contactMethod: z.string().optional(), + users: z.array(singleUserSchema).optional(), + batchOptions: batchOptionsSchema +}).strict() +.superRefine((data, ctx) => { + // If not using users array, require single user fields + if (!data.users) { + if (!data.username) { + ctx.addIssue({ + code: 'custom', + message: 'username is required when users is not provided', + path: ['username'] + }); + } + if (!data.email) { + ctx.addIssue({ + code: 'custom', + message: 'email is required when users is not provided', + path: ['email'] + }); + } + if (!data.firstName) { + ctx.addIssue({ + code: 'custom', + message: 'firstName is required when users is not provided', + path: ['firstName'] + }); + } + if (!data.lastName) { + ctx.addIssue({ + code: 'custom', + message: 'lastName is required when users is not provided', + path: ['lastName'] + }); + } + if (!data.roles) { + ctx.addIssue({ + code: 'custom', + message: 'roles is required when users is not provided', + path: ['roles'] + }); + } + } +}); + +// Update operation schema +export const UserUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + userId: z.number().optional(), + username: z.string().optional(), + email: z.string().email().optional(), + firstName: z.string().optional(), + lastName: z.string().optional(), + roles: z.array(roleSchema).optional(), + phone: z.string().optional(), + smsEmail: z.string().optional(), + timezone: z.string().optional(), + note: z.string().optional(), + status: z.string().optional(), + forcePasswordChange: z.boolean().optional(), + contactMethod: z.string().optional(), + users: z.array(singleUpdateUserSchema).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Delete operation schema +export const UserDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + userId: z.number().optional(), + ids: z.array(z.number()).optional(), + users: z.array(z.object({ + id: z.number() + }).loose()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const UserOperationArgsSchema = z.discriminatedUnion('operation', [ + UserListArgsSchema, + UserGetArgsSchema, + UserCreateArgsSchema, + UserUpdateArgsSchema, + UserDeleteArgsSchema +]); + +// Type exports +export type UserListArgs = z.infer; +export type UserGetArgs = z.infer; +export type UserCreateArgs = z.infer; +export type UserUpdateArgs = z.infer; +export type UserDeleteArgs = z.infer; +export type UserOperationArgs = z.infer; + +// Validation helper functions +export function validateListUsers(args: unknown) { + const result = UserListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetUser(args: unknown) { + const result = UserGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateUser(args: unknown) { + const result = UserCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateUser(args: unknown) { + const result = UserUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteUser(args: unknown) { + const result = UserDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/website/WebsiteHandler.ts b/src/resources/website/websiteHandler.ts similarity index 87% rename from src/resources/website/WebsiteHandler.ts rename to src/resources/website/websiteHandler.ts index b4973b7..9a7493b 100644 --- a/src/resources/website/WebsiteHandler.ts +++ b/src/resources/website/websiteHandler.ts @@ -3,11 +3,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMWebsite } from '../../types/logicmonitor.js'; @@ -17,7 +16,8 @@ import type { CreateOperationArgs, UpdateOperationArgs, DeleteOperationArgs, - OperationResult + OperationResult, + OperationType } from '../../types/operations.js'; import { validateListWebsites, @@ -25,7 +25,8 @@ import { validateCreateWebsite, validateUpdateWebsite, validateDeleteWebsite -} from './websiteSchemas.js'; +} from './websiteZodSchemas.js'; +import { getWebsiteLink } from '../../utils/resourceLinks.js'; export class WebsiteHandler extends ResourceHandler { constructor(client: LogicMonitorClient, sessionManager: SessionManager, sessionId?: string) { @@ -109,7 +110,7 @@ export class WebsiteHandler extends ResourceHandler { // eslint-disable-next-line @typescript-eslint/no-explicit-any const websitesInput = isBatch ? (validated as any).websites : [validated]; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( websitesInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (website: Record) => this.client.createWebsite(website as any), @@ -226,7 +227,7 @@ export class WebsiteHandler extends ResourceHandler { updates: args.updates || item })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( updateOps, async ({ websiteId, updates }) => this.client.updateWebsite(websiteId, updates), { @@ -265,7 +266,7 @@ export class WebsiteHandler extends ResourceHandler { websiteId: item.id || item.websiteId })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( deleteOps, async ({ websiteId }) => this.client.deleteWebsite(websiteId), { @@ -286,5 +287,39 @@ export class WebsiteHandler extends ResourceHandler { this.sessionManager.recordOperation(this.sessionContext.id, 'website', 'delete', result); return result; } + + protected override enhanceResult(operation: OperationType, result: OperationResult): void { + super.enhanceResult(operation, result); + this.attachWebsiteLinks(result); + } + + private attachWebsiteLinks(result: OperationResult): void { + if (result.data) { + this.addLinkToWebsite(result.data as unknown as Record); + } + if (Array.isArray(result.items)) { + result.items.forEach(item => + this.addLinkToWebsite(item as unknown as Record) + ); + } + } + + private addLinkToWebsite(website: Record | undefined): void { + if (!website) { + return; + } + try { + const websiteId = website.id ?? website.websiteId; + if (websiteId === null || typeof websiteId === 'undefined') { + return; + } + website.linkUrl = getWebsiteLink({ + company: this.client.getAccount(), + websiteId: websiteId as number | string + }); + } catch { + // Ignore failures so we never block the primary response + } + } } diff --git a/src/resources/website/websiteSchemas.ts b/src/resources/website/websiteSchemas.ts deleted file mode 100644 index 4542063..0000000 --- a/src/resources/website/websiteSchemas.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Website validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListWebsites(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional(), - collectorIds: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetWebsite(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - websiteId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateWebsite(args: unknown) { - const singleWebsiteSchema = Joi.object({ - name: Joi.string().required(), - domain: Joi.string().required(), - type: Joi.string().valid('webcheck', 'pingcheck').required(), - groupId: Joi.number().required(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - steps: Joi.array().items( - Joi.object({ - type: Joi.string().optional(), - name: Joi.string().optional(), - description: Joi.string().allow('').optional(), - enable: Joi.boolean().optional(), - label: Joi.string().allow('').optional(), - HTTPHeaders: Joi.string().allow('').optional(), - followRedirection: Joi.boolean().optional(), - HTTPBody: Joi.string().allow('').optional(), - HTTPMethod: Joi.string().optional(), - postDataEditType: Joi.any().optional(), - fullpageLoad: Joi.boolean().optional(), - requireAuth: Joi.boolean().optional(), - auth: Joi.any().optional(), - timeout: Joi.number().optional(), - HTTPVersion: Joi.string().optional(), - schema: Joi.string().optional(), - url: Joi.string().allow('').optional(), - matchType: Joi.string().optional(), - keyword: Joi.string().allow('').optional(), - path: Joi.string().allow('').optional(), - invertMatch: Joi.boolean().optional(), - statusCode: Joi.string().allow('').optional(), - reqScript: Joi.string().allow('').optional(), - reqType: Joi.string().optional(), - respType: Joi.string().optional(), - respScript: Joi.string().allow('').optional(), - useDefaultRoot: Joi.boolean().optional() - }).unknown(true) - ).optional() - }).unknown(true); - - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - name: Joi.string().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - domain: Joi.string().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - type: Joi.string().valid('webcheck', 'pingcheck').when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - groupId: Joi.number().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - steps: Joi.array().optional(), - websites: Joi.array().items(singleWebsiteSchema).min(1).optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateWebsite(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - websiteId: Joi.number().optional(), - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - websites: Joi.array().optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteWebsite(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - websiteId: Joi.number().optional(), - websites: Joi.array().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/website/websiteZodSchemas.ts b/src/resources/website/websiteZodSchemas.ts new file mode 100644 index 0000000..de2f594 --- /dev/null +++ b/src/resources/website/websiteZodSchemas.ts @@ -0,0 +1,241 @@ +/** + * Website Zod validation schemas + * Migrated from Joi schemas in websiteSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const propertySchema = z.object({ + name: z.string(), + value: z.string() +}); + +const stepSchema = z.object({ + type: z.string().optional(), + name: z.string().optional(), + description: z.string().optional(), + enable: z.boolean().optional(), + label: z.string().optional(), + HTTPHeaders: z.string().optional(), + followRedirection: z.boolean().optional(), + HTTPBody: z.string().optional(), + HTTPMethod: z.string().optional(), + postDataEditType: z.any().optional(), + fullpageLoad: z.boolean().optional(), + requireAuth: z.boolean().optional(), + auth: z.any().optional(), + timeout: z.number().optional(), + HTTPVersion: z.string().optional(), + schema: z.string().optional(), + url: z.string().optional(), + matchType: z.string().optional(), + keyword: z.string().optional(), + path: z.string().optional(), + invertMatch: z.boolean().optional(), + statusCode: z.string().optional(), + reqScript: z.string().optional(), + reqType: z.string().optional(), + respType: z.string().optional(), + respScript: z.string().optional(), + useDefaultRoot: z.boolean().optional() +}).loose(); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single website create schema +const singleWebsiteSchema = z.object({ + name: z.string(), + domain: z.string(), + type: z.enum(['webcheck', 'pingcheck']), + groupId: z.number(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + useDefaultAlertSetting: z.boolean().optional(), + useDefaultLocationSetting: z.boolean().optional(), + pollingInterval: z.number().optional(), + properties: z.array(propertySchema).optional(), + steps: z.array(stepSchema).optional() +}).loose(); + +// List operation schema +export const WebsiteListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional(), + collectorIds: z.string().optional() +}).strict(); + +// Get operation schema +export const WebsiteGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + websiteId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +export const WebsiteCreateArgsSchema = z.object({ + operation: z.literal('create'), + name: z.string().optional(), + domain: z.string().optional(), + type: z.enum(['webcheck', 'pingcheck']).optional(), + groupId: z.number().optional(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + useDefaultAlertSetting: z.boolean().optional(), + useDefaultLocationSetting: z.boolean().optional(), + pollingInterval: z.number().optional(), + properties: z.array(propertySchema).optional(), + steps: z.array(stepSchema).optional(), + websites: z.array(singleWebsiteSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() +.superRefine((data, ctx) => { + // If not using websites array, require single website fields + if (!data.websites) { + if (!data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when websites is not provided', + path: ['name'] + }); + } + if (!data.domain) { + ctx.addIssue({ + code: 'custom', + message: 'domain is required when websites is not provided', + path: ['domain'] + }); + } + if (!data.type) { + ctx.addIssue({ + code: 'custom', + message: 'type is required when websites is not provided', + path: ['type'] + }); + } + if (!data.groupId) { + ctx.addIssue({ + code: 'custom', + message: 'groupId is required when websites is not provided', + path: ['groupId'] + }); + } + } +}); + +// Update operation schema +export const WebsiteUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + websiteId: z.number().optional(), + name: z.string().optional(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + useDefaultAlertSetting: z.boolean().optional(), + useDefaultLocationSetting: z.boolean().optional(), + pollingInterval: z.number().optional(), + properties: z.array(propertySchema).optional(), + websites: z.array(z.any()).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); + +// Delete operation schema +export const WebsiteDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + websiteId: z.number().optional(), + websites: z.array(z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const WebsiteOperationArgsSchema = z.discriminatedUnion('operation', [ + WebsiteListArgsSchema, + WebsiteGetArgsSchema, + WebsiteCreateArgsSchema, + WebsiteUpdateArgsSchema, + WebsiteDeleteArgsSchema +]); + +// Type exports +export type WebsiteListArgs = z.infer; +export type WebsiteGetArgs = z.infer; +export type WebsiteCreateArgs = z.infer; +export type WebsiteUpdateArgs = z.infer; +export type WebsiteDeleteArgs = z.infer; +export type WebsiteOperationArgs = z.infer; + +// Validation helper functions +export function validateListWebsites(args: unknown) { + const result = WebsiteListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetWebsite(args: unknown) { + const result = WebsiteGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateWebsite(args: unknown) { + const result = WebsiteCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateWebsite(args: unknown) { + const result = WebsiteUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteWebsite(args: unknown) { + const result = WebsiteDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/resources/websiteGroup/WebsiteGroupHandler.ts b/src/resources/websiteGroup/websiteGroupHandler.ts similarity index 96% rename from src/resources/websiteGroup/WebsiteGroupHandler.ts rename to src/resources/websiteGroup/websiteGroupHandler.ts index 5f63379..d668637 100644 --- a/src/resources/websiteGroup/WebsiteGroupHandler.ts +++ b/src/resources/websiteGroup/websiteGroupHandler.ts @@ -3,11 +3,10 @@ */ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; -import { ResourceHandler } from '../base/ResourceHandler.js'; -import { BatchOperationResolver } from '../base/BatchResolver.js'; +import { ResourceHandler } from '../base/resourceHandler.js'; +import { BatchOperationResolver } from '../base/batchResolver.js'; import { LogicMonitorClient } from '../../api/client.js'; import { SessionManager } from '../../session/sessionManager.js'; -import { batchProcessor } from '../../utils/batchProcessor.js'; import { sanitizeFields } from '../../utils/fieldMetadata.js'; import { throwBatchFailure } from '../../utils/batchUtils.js'; import type { LMWebsiteGroup } from '../../types/logicmonitor.js'; @@ -25,7 +24,7 @@ import { validateCreateWebsiteGroup, validateUpdateWebsiteGroup, validateDeleteWebsiteGroup -} from './websiteGroupSchemas.js'; +} from './websiteGroupZodSchemas.js'; export class WebsiteGroupHandler extends ResourceHandler { constructor(client: LogicMonitorClient, sessionManager: SessionManager, sessionId?: string) { @@ -108,7 +107,7 @@ export class WebsiteGroupHandler extends ResourceHandler { // eslint-disable-next-line @typescript-eslint/no-explicit-any const groupsInput = isBatch ? (validated as any).groups : [validated]; - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( groupsInput, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (group: Record) => this.client.createWebsiteGroup(group as any), @@ -232,7 +231,7 @@ export class WebsiteGroupHandler extends ResourceHandler { updates: args.updates || item })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( updateOps, async ({ groupId, updates }) => this.client.updateWebsiteGroup(groupId, updates), { @@ -272,7 +271,7 @@ export class WebsiteGroupHandler extends ResourceHandler { deleteChildren: (args.deleteChildren as boolean) ?? false })); - const batchResult = await batchProcessor.processBatch( + const batchResult = await this.processBatch( deleteOps, async ({ groupId, deleteChildren }) => this.client.deleteWebsiteGroup(groupId, { deleteChildren }), { diff --git a/src/resources/websiteGroup/websiteGroupSchemas.ts b/src/resources/websiteGroup/websiteGroupSchemas.ts deleted file mode 100644 index 537aebc..0000000 --- a/src/resources/websiteGroup/websiteGroupSchemas.ts +++ /dev/null @@ -1,140 +0,0 @@ -/** - * Website Group validation schemas - */ - -import Joi from 'joi'; -import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; - -const batchOptionsSchema = Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional(), - dryRun: Joi.boolean().optional() -}).optional(); - -export function validateListWebsiteGroups(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('list').required(), - filter: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - autoPaginate: Joi.boolean().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateGetWebsiteGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('get').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - fields: Joi.string().optional() - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateCreateWebsiteGroup(args: unknown) { - const singleGroupSchema = Joi.object({ - name: Joi.string().required(), - parentId: Joi.number().required(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() - }).unknown(true); - - const schema = Joi.object({ - operation: Joi.string().valid('create').required(), - name: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - parentId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - groups: Joi.array().items(singleGroupSchema).min(1).optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateUpdateWebsiteGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('update').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - groups: Joi.array().optional(), - updates: Joi.object().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(true); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - -export function validateDeleteWebsiteGroup(args: unknown) { - const schema = Joi.object({ - operation: Joi.string().valid('delete').required(), - id: Joi.number().optional(), - groupId: Joi.number().optional(), - deleteChildren: Joi.boolean().optional(), - groups: Joi.array().optional(), - applyToPrevious: Joi.string().optional(), - filter: Joi.string().optional(), - batchOptions: batchOptionsSchema - }).unknown(false); - - const { error, value } = schema.validate(args); - if (error) { - throw new McpError(ErrorCode.InvalidParams, `Validation error: ${error.message}`); - } - return value; -} - diff --git a/src/resources/websiteGroup/websiteGroupZodSchemas.ts b/src/resources/websiteGroup/websiteGroupZodSchemas.ts new file mode 100644 index 0000000..98a602d --- /dev/null +++ b/src/resources/websiteGroup/websiteGroupZodSchemas.ts @@ -0,0 +1,182 @@ +/** + * Website Group Zod validation schemas + * Migrated from Joi schemas in websiteGroupSchemas.ts + */ + +import { z } from 'zod'; +import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; + +// Common schemas +const propertySchema = z.object({ + name: z.string(), + value: z.string() +}); + +const batchOptionsSchema = z.object({ + maxConcurrent: z.number().min(1).max(50).optional(), + continueOnError: z.boolean().optional(), + dryRun: z.boolean().optional() +}).optional(); + +// Single group create schema +const singleGroupSchema = z.object({ + name: z.string(), + parentId: z.number(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + properties: z.array(propertySchema).optional() +}).loose(); + +// List operation schema +export const WebsiteGroupListArgsSchema = z.object({ + operation: z.literal('list'), + filter: z.string().optional(), + size: z.number().min(1).max(1000).optional(), + offset: z.number().min(0).optional(), + fields: z.string().optional(), + autoPaginate: z.boolean().optional() +}).strict(); + +// Get operation schema +export const WebsiteGroupGetArgsSchema = z.object({ + operation: z.literal('get'), + id: z.number().optional(), + groupId: z.number().optional(), + fields: z.string().optional() +}).strict(); + +// Create operation schema +export const WebsiteGroupCreateArgsSchema = z.object({ + operation: z.literal('create'), + name: z.string().optional(), + parentId: z.number().optional(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + properties: z.array(propertySchema).optional(), + groups: z.array(singleGroupSchema).min(1).optional(), + batchOptions: batchOptionsSchema +}).loose() +.superRefine((data, ctx) => { + // If not using groups array, require single group fields + if (!data.groups) { + if (!data.name) { + ctx.addIssue({ + code: 'custom', + message: 'name is required when groups is not provided', + path: ['name'] + }); + } + if (!data.parentId) { + ctx.addIssue({ + code: 'custom', + message: 'parentId is required when groups is not provided', + path: ['parentId'] + }); + } + } +}); + +// Update operation schema +export const WebsiteGroupUpdateArgsSchema = z.object({ + operation: z.literal('update'), + id: z.number().optional(), + groupId: z.number().optional(), + name: z.string().optional(), + description: z.string().optional(), + disableAlerting: z.boolean().optional(), + stopMonitoring: z.boolean().optional(), + properties: z.array(propertySchema).optional(), + groups: z.array(z.any()).optional(), + updates: z.record(z.string(), z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).loose(); + +// Delete operation schema +export const WebsiteGroupDeleteArgsSchema = z.object({ + operation: z.literal('delete'), + id: z.number().optional(), + groupId: z.number().optional(), + deleteChildren: z.boolean().optional(), + groups: z.array(z.any()).optional(), + applyToPrevious: z.string().optional(), + filter: z.string().optional(), + batchOptions: batchOptionsSchema +}).strict(); + +// Combined operation schema with discriminated union +export const WebsiteGroupOperationArgsSchema = z.discriminatedUnion('operation', [ + WebsiteGroupListArgsSchema, + WebsiteGroupGetArgsSchema, + WebsiteGroupCreateArgsSchema, + WebsiteGroupUpdateArgsSchema, + WebsiteGroupDeleteArgsSchema +]); + +// Type exports +export type WebsiteGroupListArgs = z.infer; +export type WebsiteGroupGetArgs = z.infer; +export type WebsiteGroupCreateArgs = z.infer; +export type WebsiteGroupUpdateArgs = z.infer; +export type WebsiteGroupDeleteArgs = z.infer; +export type WebsiteGroupOperationArgs = z.infer; + +// Validation helper functions +export function validateListWebsiteGroups(args: unknown) { + const result = WebsiteGroupListArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateGetWebsiteGroup(args: unknown) { + const result = WebsiteGroupGetArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateCreateWebsiteGroup(args: unknown) { + const result = WebsiteGroupCreateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateUpdateWebsiteGroup(args: unknown) { + const result = WebsiteGroupUpdateArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + +export function validateDeleteWebsiteGroup(args: unknown) { + const result = WebsiteGroupDeleteArgsSchema.safeParse(args); + if (!result.success) { + throw new McpError( + ErrorCode.InvalidParams, + `Validation error: ${result.error.issues.map(e => `${String(e.path.join('.'))}: ${e.message}`).join(', ')}` + ); + } + return result.data; +} + diff --git a/src/schemas/generated/logicmonitorSwaggerSchema.ts b/src/schemas/generated/logicmonitorSwaggerSchema.ts new file mode 100644 index 0000000..03a0e3c --- /dev/null +++ b/src/schemas/generated/logicmonitorSwaggerSchema.ts @@ -0,0 +1,21905 @@ +/** + * Generated by orval v8.0.0-rc.2 🍺 + * Do not edit manually. + * LogicMonitor REST API + * LogicMonitor is a SaaS-based performance monitoring platform that provides full visibility into complex, hybrid infrastructures, offering granular performance monitoring and actionable data and insights. logicmonitor_sdk enables you to manage your LogicMonitor account programmatically.

Note:
  • For Python SDKs, the REQUEST parameters can contain camelCase or an underscore.
  • Both underscore and camelCase are supported if parameters are encapsulated within the body.
  • Only camelCase is supported if parameters are encapsulated within the body and also if the user is passing raw JSON as REQUEST parameter. However, the RESPONSE parameters always contain an underscore. For example, you can use testLocation or test_location in the REQUEST parameter. But the RESPONSE parameter will always be test_location.
  • The fields parameter only supports camelCase.
+ * OpenAPI spec version: 3.0.0 + */ +import * as zod from 'zod'; + +/** + * Retrieve a paginated list of device datasources + * @summary Get device datasource list + */ +export const getDeviceDatasourceListParams = zod.object({ + "deviceId": zod.number() +}) + +export const getDeviceDatasourceListQuerySizeDefault = 50; +export const getDeviceDatasourceListQueryOffsetDefault = 0; + +export const getDeviceDatasourceListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceDatasourceListQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceDatasourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "alertStatus": zod.string().optional(), + "autoDiscovery": zod.boolean().optional(), + "dataSourceDisplayName": zod.string().optional(), + "deviceId": zod.number().optional(), + "deviceName": zod.string().optional(), + "createdOn": zod.number().optional(), + "collectMethod": zod.string().optional(), + "dataSourceId": zod.number().optional(), + "graphs": zod.array(zod.object({ + "displayPrio": zod.number().optional(), + "name": zod.string().optional(), + "id": zod.number().optional(), + "title": zod.string().optional() +})).optional(), + "sdtAt": zod.string().optional(), + "nextAutoDiscoveryOn": zod.number().optional(), + "id": zod.number().optional(), + "alertStatusPriority": zod.number().optional(), + "alertDisableStatus": zod.string().optional(), + "dataSourceDescription": zod.string().optional(), + "overviewGraphs": zod.array(zod.object({ + "displayPrio": zod.number().optional(), + "name": zod.string().optional(), + "id": zod.number().optional(), + "title": zod.string().optional() +})).optional(), + "stopMonitoring": zod.boolean().optional(), + "assignedOn": zod.number().optional(), + "isMultiple": zod.boolean().optional(), + "instanceNumber": zod.number().optional(), + "updatedOn": zod.number().optional(), + "sdtStatus": zod.string().optional(), + "dataSourceName": zod.string().optional(), + "deviceDisplayName": zod.string().optional(), + "monitoringInstanceNumber": zod.number().optional(), + "groupsDisabledThisSource": zod.array(zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).describe('alerting disabled on which tree node')).optional(), + "groupName": zod.string().optional(), + "instanceAutoGroupEnabled": zod.boolean().optional(), + "alertingDisabledOn": zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).optional().describe('alerting disabled on which tree node'), + "dataSourceType": zod.string().optional(), + "status": zod.number().optional() +})).optional() +}) + + +/** + * Import configuration source data from an XML file + * @summary Import config source via XML + */ +export const importConfigSourceBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}) +}) + +export const importConfigSourceResponse = zod.object({ + +}) + + +/** + * Import a JobMonitor using json data + * @summary Import batch JobMonitor via json + */ +export const importJobMonitorJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importJobMonitorJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importJobMonitorJsonResponse = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * get collector version list + * @summary get collector version list + */ +export const getCollectorVersionListQuerySizeDefault = 50;export const getCollectorVersionListQueryOffsetDefault = 0; + +export const getCollectorVersionListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getCollectorVersionListQuerySizeDefault), + "offset": zod.number().default(getCollectorVersionListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getCollectorVersionListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "patch": zod.boolean().optional().describe('Specifies if this is a ea patch version'), + "feature": zod.boolean().optional().describe('Specifies if this is a feature version'), + "stable": zod.boolean().optional().describe('False for early release. True for general release'), + "releaseEpoch": zod.number().optional().describe('Release Epoch for official releases'), + "has32bitWindows": zod.boolean().optional().describe('True if Windows collector available'), + "has32bitLinux": zod.boolean().optional().describe('True if Linux collector available'), + "majorVersion": zod.number().optional().describe('The collector major version'), + "minorVersion": zod.number().optional().describe('The collector minor version'), + "mandatory": zod.boolean().optional().describe('True if collector is a required release') +})).optional() +}) + + +/** + * Retrieves a datasource overview graph based on the provided ID + * @summary Get datasource overview graph by ID + */ +export const getDataSourceOverviewGraphByIdParams = zod.object({ + "dsId": zod.number(), + "id": zod.number() +}) + +export const getDataSourceOverviewGraphByIdResponse = zod.object({ + "base1024": zod.boolean().optional().describe('base1024 graph or not'), + "timeScale": zod.string().optional().describe('The graph time scale. \nThe values can be 1hour|2hour|5hour|day|yesterday|week|lastweek|month|3month|year'), + "maxValue": zod.object({ + +}).optional().describe('The graph max value'), + "displayPrio": zod.number().optional().describe('The graph display priority'), + "aggregated": zod.boolean().optional().describe('Whether the overview graph is aggregated'), + "title": zod.string().optional().describe('The graph title'), + "virtualDataPoints": zod.array(zod.object({ + "rpn": zod.string().optional().describe('The graph virtual data point rpn expression'), + "name": zod.string().optional().describe('The graph virtual data point name') +}).describe('The virtual data point list')).optional().describe('The virtual data point list'), + "minValue": zod.object({ + +}).optional().describe('The graph min value'), + "name": zod.string().optional().describe('The graph name'), + "width": zod.number().optional().describe('The graph width'), + "dataPoints": zod.array(zod.object({ + "aggregateMethod": zod.string().optional().describe('The graph line data point aggregate method.\nThe values can be average|min|max|sum'), + "dataPointName": zod.string().optional().describe('The graph line data point name'), + "dataPointId": zod.number().optional().describe('The graph line data point Id'), + "consolidateFunc": zod.number().optional().describe('The graph line data point consolidate function.\nThe values can be 1|2|3\nwhere,\n 1=avg, 2=max, 3=min'), + "dataSourceDataPointId": zod.number().optional() +}).describe('The graph data point list')).optional().describe('The graph data point list'), + "verticalLabel": zod.string().optional().describe('The graph vertical label'), + "id": zod.number().optional().describe('The graph Id'), + "rigid": zod.boolean().optional().describe('The rigid. The values can be true|false'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The graph line color name'), + "dataPointName": zod.string().optional().describe('The graph line data point name'), + "dataPointId": zod.number().optional().describe('The graph line data point id'), + "legend": zod.string().optional().describe('The graph line legend'), + "isVirtualDataPoint": zod.boolean().optional().describe('Whether the graph line\'s data point is a virtual data point'), + "type": zod.number().optional().describe('The graph line type. \nThe values can be 1|2|3|4 \nwhere,\n 1=line, 2=area, 3=stack, 4=column') +}).describe('The graph lines')).optional().describe('The graph lines'), + "height": zod.number().optional().describe('The graph height') +}) + + +/** + * get immediate devices under group + * @summary get immediate devices under group + */ +export const getImmediateDeviceListByDeviceGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getImmediateDeviceListByDeviceGroupIdQuerySizeDefault = 50;export const getImmediateDeviceListByDeviceGroupIdQueryOffsetDefault = 0; + +export const getImmediateDeviceListByDeviceGroupIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getImmediateDeviceListByDeviceGroupIdQuerySizeDefault), + "offset": zod.number().default(getImmediateDeviceListByDeviceGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getImmediateDeviceListByDeviceGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +})).optional() +}) + + +/** + * get detailed config information for the instance + * @summary get detailed config information for the instance + */ +export const getDeviceConfigSourceConfigListParams = zod.object({ + "instanceId": zod.number(), + "deviceId": zod.number(), + "hdsId": zod.number() +}) + +export const getDeviceConfigSourceConfigListQuerySizeDefault = 50;export const getDeviceConfigSourceConfigListQueryOffsetDefault = 0; + +export const getDeviceConfigSourceConfigListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceConfigSourceConfigListQuerySizeDefault), + "offset": zod.number().default(getDeviceConfigSourceConfigListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceConfigSourceConfigListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "instanceName": zod.string().optional().describe('Device datasource instance name'), + "deviceDataSourceId": zod.number().optional().describe('Device datasource id'), + "excludeLines": zod.array(zod.number().describe('advanceDiffChecker')).optional().describe('advanceDiffChecker'), + "configStatus": zod.number().optional().describe('Configuration file collect status'), + "comparedWith": zod.string().optional().describe('Version compared with and found difference'), + "version": zod.number().optional().describe('Config version'), + "deviceId": zod.number().optional().describe('Device id'), + "deltaConfig": zod.array(zod.object({ + "rowNo": zod.number().optional().describe('Diff row number'), + "type": zod.string().optional().describe('Diff type. The values can be : add|remove'), + "content": zod.string().optional().describe('Configuration content') +}).describe('Configuration file diff')).optional().describe('Configuration file diff'), + "deviceDisplayName": zod.string().optional().describe('Device display name'), + "dataSourceName": zod.string().optional().describe('Datasource name'), + "alerts": zod.array(zod.object({ + "alertLevel": zod.number().optional().describe('Alert level, 0 - alert is cleared, 2 - warn alert, 3 - error alert, 4 - critical alert'), + "id": zod.string().optional().describe('Alert id'), + "alertId": zod.string().optional().describe('Alert internal id'), + "alertSummary": zod.string().optional().describe('Summary of this config source alert'), + "timestamp": zod.number().optional().describe('Timestamp of alert start or clear') +}).describe('Alerts associated to this configuration file')).optional().describe('Alerts associated to this configuration file'), + "dataSourceId": zod.number().optional().describe('Configsource id'), + "instanceId": zod.number().optional().describe('Device datasource instance id'), + "configErrMsg": zod.string().optional().describe('Configuration file collect error message'), + "changeStatus": zod.string().optional().describe('Configuration file change status, if the first configuration then it is Added, else Changed, values can be : Add|Change '), + "id": zod.string().optional().describe('The id of the datasource'), + "pollTimestamp": zod.number().optional().describe('Datasource poll timestamp in milliseconds'), + "config": zod.string().optional().describe('Configuration file content') +})).optional() +}) + + +/** + * Update an existing log partition + * @summary Update an existing log partition + */ +export const patchLogPartitionParams = zod.object({ + "id": zod.string() +}) + +export const patchLogPartitionBody = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + +export const patchLogPartitionResponse = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "userPermission": zod.string().optional().describe('Partition user permission'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "pausedAt": zod.number().optional().describe('Epoch time when partition was paused'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "id": zod.string().optional().describe('Partition Id'), + "fullname": zod.string().optional().describe('Partition Fullname'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + + +/** + * Retrieve details of a specific log partition + * @summary Retrieve details of a specific log partition + */ +export const getPartitionByIdParams = zod.object({ + "id": zod.string() +}) + +export const getPartitionByIdResponse = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "userPermission": zod.string().optional().describe('Partition user permission'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "pausedAt": zod.number().optional().describe('Epoch time when partition was paused'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "id": zod.string().optional().describe('Partition Id'), + "fullname": zod.string().optional().describe('Partition Fullname'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + + +/** + * Delete a log partition by ID + * @summary Delete a log partition by ID + */ +export const deleteLogPartitionByIdParams = zod.object({ + "id": zod.string() +}) + +export const deleteLogPartitionByIdResponse = zod.object({ + +}) + + +/** + * Update an existing log partition + * @summary Update an existing log partition + */ +export const updateLogPartitionParams = zod.object({ + "id": zod.string() +}) + +export const updateLogPartitionBody = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + +export const updateLogPartitionResponse = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "userPermission": zod.string().optional().describe('Partition user permission'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "pausedAt": zod.number().optional().describe('Epoch time when partition was paused'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "id": zod.string().optional().describe('Partition Id'), + "fullname": zod.string().optional().describe('Partition Fullname'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + + +/** + * Adds a new event source + * @summary Add event source + */ +export const addEventSourceBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + +export const addEventSourceResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + + +/** + * Retrieves the list of event sources + * @summary Get event source list + */ +export const getEventSourceListQuerySizeDefault = 50;export const getEventSourceListQueryOffsetDefault = 0; + +export const getEventSourceListQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getEventSourceListQuerySizeDefault), + "offset": zod.number().default(getEventSourceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getEventSourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +})).optional() +}) + + +/** + * add a new device + * @summary add a new device + */ +export const addDeviceQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "addFromWizard": zod.boolean().optional(), + "needStcGrpAndSortedCP": zod.boolean().optional() +}) + +export const addDeviceBody = zod.object({ + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "name": zod.string().describe('The host name or IP address of the device'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "displayName": zod.string().describe('The display name of the device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "description": zod.string().optional().describe('The device description'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + +export const addDeviceResponse = zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + + +/** + * Retrieve a paginated list of devices + * @summary Get device list + */ +export const getDeviceListQuerySizeDefault = 50;export const getDeviceListQueryOffsetDefault = 0; + +export const getDeviceListQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "includeDeletedResources": zod.boolean().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceListQuerySizeDefault), + "offset": zod.number().default(getDeviceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +})).optional() +}) + + +/** + * get alert by id + * @summary get alert + */ +export const getAlertByIdParams = zod.object({ + "id": zod.string() +}) + +export const getAlertByIdQueryParams = zod.object({ + "needMessage": zod.boolean().optional(), + "customColumns": zod.string().optional(), + "fields": zod.string().optional() +}) + +export const getAlertByIdResponse = zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.object({ + "activeOnly": zod.boolean().optional(), + "anomaly": zod.string().optional(), + "pivotType": zod.string().optional(), + "suppressorFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "forServices": zod.boolean().optional(), + "refreshActiveAlertCache": zod.boolean().optional(), + "pivotDimensions": zod.array(zod.string()).optional(), + "dependencyRoutingStateFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "excludePhatomFlag": zod.boolean().optional(), + "dependencyRoleFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "pivotDimensionESField": zod.array(zod.string()).optional(), + "lmconfigEnabled": zod.boolean().optional(), + "dependencyRoutingStateFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "dependencyRoleFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "clearedOnly": zod.boolean().optional(), + "suppressorFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "alertsById": zod.object({ + "resourceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "eventSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "clusterAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "datapoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "escalationChains": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "sdts": zod.record(zod.string(), zod.object({ + "notes": zod.string().optional().describe('Notes regarding the SDT'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "dataSourceId": zod.number().optional().describe('The id of the datasource instance that the SDT will be associated with'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "endedAtMS": zod.number().optional().describe('The time milliseconds that the SDT will end or has ended.'), + "resourceGroupId": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT'), + "identifier": zod.object({ + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional() +}).optional(), + "targetId": zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).optional().describe('SDT target'), + "deviceDataSourceId": zod.number().optional().describe('The id of the device datasource instance group that the SDT will be associated with'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "intoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "websiteGroupId": zod.number().describe('The Id of the service group that the SDT applies to'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "recurrence": zod.string().describe('Describes how and when the SDT recures'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "relatedIntoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "createdBy": zod.string().optional().describe('SDT creator\'s username'), + "startedAtMS": zod.number().optional().describe('The time in milliseconds that the SDT will start or has started') +})).optional(), + "alertRules": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "resources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logpipelinesources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "services": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstances": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "alerts": zod.record(zod.string(), zod.unknown()).optional(), + "logalerts": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "batchJobs": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstanceAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceCheckpoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logAlertsMap": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional() +}).optional() +}).optional(), + "id": zod.string().optional().describe('The alert id'), + "detailMessage": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +}) + + +/** + * get alerts + * @summary get alerts + */ +export const getAlertListByDeviceIdParams = zod.object({ + "id": zod.number() +}) + +export const getAlertListByDeviceIdQuerySizeDefault = 50;export const getAlertListByDeviceIdQueryOffsetDefault = 0; + +export const getAlertListByDeviceIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "needMessage": zod.boolean().optional(), + "customColumns": zod.string().optional(), + "bound": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getAlertListByDeviceIdQuerySizeDefault), + "offset": zod.number().default(getAlertListByDeviceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAlertListByDeviceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.object({ + "activeOnly": zod.boolean().optional(), + "anomaly": zod.string().optional(), + "pivotType": zod.string().optional(), + "suppressorFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "forServices": zod.boolean().optional(), + "refreshActiveAlertCache": zod.boolean().optional(), + "pivotDimensions": zod.array(zod.string()).optional(), + "dependencyRoutingStateFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "excludePhatomFlag": zod.boolean().optional(), + "dependencyRoleFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "pivotDimensionESField": zod.array(zod.string()).optional(), + "lmconfigEnabled": zod.boolean().optional(), + "dependencyRoutingStateFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "dependencyRoleFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "clearedOnly": zod.boolean().optional(), + "suppressorFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "alertsById": zod.object({ + "resourceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "eventSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "clusterAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "datapoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "escalationChains": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "sdts": zod.record(zod.string(), zod.object({ + "notes": zod.string().optional().describe('Notes regarding the SDT'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "dataSourceId": zod.number().optional().describe('The id of the datasource instance that the SDT will be associated with'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "endedAtMS": zod.number().optional().describe('The time milliseconds that the SDT will end or has ended.'), + "resourceGroupId": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT'), + "identifier": zod.object({ + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional() +}).optional(), + "targetId": zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).optional().describe('SDT target'), + "deviceDataSourceId": zod.number().optional().describe('The id of the device datasource instance group that the SDT will be associated with'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "intoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "websiteGroupId": zod.number().describe('The Id of the service group that the SDT applies to'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "recurrence": zod.string().describe('Describes how and when the SDT recures'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "relatedIntoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "createdBy": zod.string().optional().describe('SDT creator\'s username'), + "startedAtMS": zod.number().optional().describe('The time in milliseconds that the SDT will start or has started') +})).optional(), + "alertRules": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "resources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logpipelinesources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "services": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstances": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "alerts": zod.record(zod.string(), zod.unknown()).optional(), + "logalerts": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "batchJobs": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstanceAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceCheckpoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logAlertsMap": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional() +}).optional() +}).optional(), + "id": zod.string().optional().describe('The alert id'), + "detailMessage": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +})).optional() +}) + + +/** + * schedule active discovery for a device + * @summary schedule active discovery for a device + */ +export const scheduleAutoDiscoveryByDeviceIdParams = zod.object({ + "id": zod.number() +}) + +export const scheduleAutoDiscoveryByDeviceIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional() +}) + +export const scheduleAutoDiscoveryByDeviceIdResponse = zod.object({ + +}) + + +/** + * Retrieve the list of alerts + * @summary Get alert list + */ +export const getAlertListQuerySizeDefault = 50;export const getAlertListQueryOffsetDefault = 0; + +export const getAlertListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAlertListQuerySizeDefault), + "offset": zod.number().default(getAlertListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAlertListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.object({ + "activeOnly": zod.boolean().optional(), + "anomaly": zod.string().optional(), + "pivotType": zod.string().optional(), + "suppressorFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "forServices": zod.boolean().optional(), + "refreshActiveAlertCache": zod.boolean().optional(), + "pivotDimensions": zod.array(zod.string()).optional(), + "dependencyRoutingStateFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "excludePhatomFlag": zod.boolean().optional(), + "dependencyRoleFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "pivotDimensionESField": zod.array(zod.string()).optional(), + "lmconfigEnabled": zod.boolean().optional(), + "dependencyRoutingStateFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "dependencyRoleFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "clearedOnly": zod.boolean().optional(), + "suppressorFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "alertsById": zod.object({ + "resourceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "eventSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "clusterAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "datapoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "escalationChains": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "sdts": zod.record(zod.string(), zod.object({ + "notes": zod.string().optional().describe('Notes regarding the SDT'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "dataSourceId": zod.number().optional().describe('The id of the datasource instance that the SDT will be associated with'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "endedAtMS": zod.number().optional().describe('The time milliseconds that the SDT will end or has ended.'), + "resourceGroupId": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT'), + "identifier": zod.object({ + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional() +}).optional(), + "targetId": zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).optional().describe('SDT target'), + "deviceDataSourceId": zod.number().optional().describe('The id of the device datasource instance group that the SDT will be associated with'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "intoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "websiteGroupId": zod.number().describe('The Id of the service group that the SDT applies to'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "recurrence": zod.string().describe('Describes how and when the SDT recures'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "relatedIntoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "createdBy": zod.string().optional().describe('SDT creator\'s username'), + "startedAtMS": zod.number().optional().describe('The time in milliseconds that the SDT will start or has started') +})).optional(), + "alertRules": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "resources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logpipelinesources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "services": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstances": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "alerts": zod.record(zod.string(), zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.unknown().optional(), + "id": zod.string().optional().describe('The alert id'), + "detailMessage": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +})).optional(), + "logalerts": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "batchJobs": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstanceAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceCheckpoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logAlertsMap": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional() +}).optional() +}).optional(), + "id": zod.string().optional().describe('The alert id'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +})).optional() +}) + + +/** + * Update a property rule by id + * @summary update a property rule + */ +export const patchPropertyRuleParams = zod.object({ + "id": zod.number() +}) + +export const patchPropertyRuleQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchPropertyRuleBody = zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + +export const patchPropertyRuleResponse = zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + + +/** + * Fetches a property rule by its ID + * @summary Get property rules by id + */ +export const getPropertyRulesByIdParams = zod.object({ + "id": zod.number() +}) + +export const getPropertyRulesByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getPropertyRulesByIdResponse = zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + + +/** + * Delete a property rule by id + * @summary delete a property rule + */ +export const deletePropertyRuleParams = zod.object({ + "id": zod.number() +}) + +export const deletePropertyRuleResponse = zod.object({ + +}) + + +/** + * Update a property rule by id + * @summary update a property rule + */ +export const updatePropertyRuleParams = zod.object({ + "id": zod.number() +}) + +export const updatePropertyRuleQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updatePropertyRuleBody = zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + +export const updatePropertyRuleResponse = zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + + +/** + * Perform an action on a specified log partition + * @summary Perform an action on a specified log partition + */ +export const partitionActionParams = zod.object({ + "id": zod.string(), + "action": zod.string() +}) + +export const partitionActionResponse = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "userPermission": zod.string().optional().describe('Partition user permission'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "pausedAt": zod.number().optional().describe('Epoch time when partition was paused'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "id": zod.string().optional().describe('Partition Id'), + "fullname": zod.string().optional().describe('Partition Fullname'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + + +/** + * Update access group + * @summary Update access group + */ +export const patchAccessGroupParams = zod.object({ + "id": zod.number() +}) + +export const patchAccessGroupBody = zod.object({ + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group') +}).describe('Module\'s access groups') + +export const patchAccessGroupResponse = zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups') + + +/** + * Get access group by id + * @summary Get access group by id + */ +export const getAccessGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getAccessGroupByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getAccessGroupByIdResponse = zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups') + + +/** + * Delete access group + * @summary Delete access group + */ +export const deleteAccessGroupParams = zod.object({ + "id": zod.number() +}) + +export const deleteAccessGroupResponse = zod.object({ + +}) + + +/** + * Update access group + * @summary Update access group + */ +export const updateAccessGroupParams = zod.object({ + "id": zod.number() +}) + +export const updateAccessGroupBody = zod.object({ + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group') +}).describe('Module\'s access groups') + +export const updateAccessGroupResponse = zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups') + + +/** + * add opsnote + * @summary add opsnote + */ +export const addOpsNoteBody = zod.object({ + "note": zod.string().describe('The note message'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + +export const addOpsNoteResponse = zod.object({ + "note": zod.string().describe('The note message'), + "createdBy": zod.string().optional().describe('The user that created the Ops Note'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "id": zod.string().optional().describe('The id associated with the Ops Note'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + + +/** + * get opsnote list + * @summary get opsnote list + */ +export const getOpsNoteListQuerySizeDefault = 50;export const getOpsNoteListQueryOffsetDefault = 0; + +export const getOpsNoteListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getOpsNoteListQuerySizeDefault), + "offset": zod.number().default(getOpsNoteListQueryOffsetDefault), + "filter": zod.string().optional().describe('Filter the response based on tags, createdBy, happenedOn, monitorObjectGroups, monitorObjectNames, or _all field values') +}) + +export const getOpsNoteListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "note": zod.string().describe('The note message'), + "createdBy": zod.string().optional().describe('The user that created the Ops Note'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "id": zod.string().optional().describe('The id associated with the Ops Note'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +})).optional() +}) + + +/** + * get SDT history for the website (Response may contain extra fields depending upon the type of SDT) + * @summary get SDT history for the website (Response may contain extra fields depending upon the type of SDT) + */ +export const getSDTHistoryByWebsiteIdParams = zod.object({ + "id": zod.number() +}) + +export const getSDTHistoryByWebsiteIdQuerySizeDefault = 50;export const getSDTHistoryByWebsiteIdQueryOffsetDefault = 0; + +export const getSDTHistoryByWebsiteIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getSDTHistoryByWebsiteIdQuerySizeDefault), + "offset": zod.number().default(getSDTHistoryByWebsiteIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTHistoryByWebsiteIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * Retrieves the list of datasource overview graphs + * @summary Get datasource overview graph list + */ +export const getDataSourceOverviewGraphListParams = zod.object({ + "dsId": zod.number() +}) + +export const getDataSourceOverviewGraphListQuerySizeDefault = 50;export const getDataSourceOverviewGraphListQueryOffsetDefault = 0; + +export const getDataSourceOverviewGraphListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDataSourceOverviewGraphListQuerySizeDefault), + "offset": zod.number().default(getDataSourceOverviewGraphListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDataSourceOverviewGraphListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "base1024": zod.boolean().optional().describe('base1024 graph or not'), + "timeScale": zod.string().optional().describe('The graph time scale. \nThe values can be 1hour|2hour|5hour|day|yesterday|week|lastweek|month|3month|year'), + "maxValue": zod.object({ + +}).optional().describe('The graph max value'), + "displayPrio": zod.number().optional().describe('The graph display priority'), + "aggregated": zod.boolean().optional().describe('Whether the overview graph is aggregated'), + "title": zod.string().optional().describe('The graph title'), + "virtualDataPoints": zod.array(zod.object({ + "rpn": zod.string().optional().describe('The graph virtual data point rpn expression'), + "name": zod.string().optional().describe('The graph virtual data point name') +}).describe('The virtual data point list')).optional().describe('The virtual data point list'), + "minValue": zod.object({ + +}).optional().describe('The graph min value'), + "name": zod.string().optional().describe('The graph name'), + "width": zod.number().optional().describe('The graph width'), + "dataPoints": zod.array(zod.object({ + "aggregateMethod": zod.string().optional().describe('The graph line data point aggregate method.\nThe values can be average|min|max|sum'), + "dataPointName": zod.string().optional().describe('The graph line data point name'), + "dataPointId": zod.number().optional().describe('The graph line data point Id'), + "consolidateFunc": zod.number().optional().describe('The graph line data point consolidate function.\nThe values can be 1|2|3\nwhere,\n 1=avg, 2=max, 3=min'), + "dataSourceDataPointId": zod.number().optional() +}).describe('The graph data point list')).optional().describe('The graph data point list'), + "verticalLabel": zod.string().optional().describe('The graph vertical label'), + "id": zod.number().optional().describe('The graph Id'), + "rigid": zod.boolean().optional().describe('The rigid. The values can be true|false'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The graph line color name'), + "dataPointName": zod.string().optional().describe('The graph line data point name'), + "dataPointId": zod.number().optional().describe('The graph line data point id'), + "legend": zod.string().optional().describe('The graph line legend'), + "isVirtualDataPoint": zod.boolean().optional().describe('Whether the graph line\'s data point is a virtual data point'), + "type": zod.number().optional().describe('The graph line type. \nThe values can be 1|2|3|4 \nwhere,\n 1=line, 2=area, 3=stack, 4=column') +}).describe('The graph lines')).optional().describe('The graph lines'), + "height": zod.number().optional().describe('The graph height') +})).optional() +}) + + +/** + * get SDT history for the device + * @summary get SDT history for the device + */ +export const getSDTHistoryByDeviceIdParams = zod.object({ + "id": zod.number() +}) + +export const getSDTHistoryByDeviceIdQuerySizeDefault = 50;export const getSDTHistoryByDeviceIdQueryOffsetDefault = 0; + +export const getSDTHistoryByDeviceIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getSDTHistoryByDeviceIdQuerySizeDefault), + "offset": zod.number().default(getSDTHistoryByDeviceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTHistoryByDeviceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * get a config for a device + * @summary get a config for a device + */ +export const getDeviceConfigSourceConfigByIdParams = zod.object({ + "instanceId": zod.number(), + "deviceId": zod.number(), + "hdsId": zod.number(), + "id": zod.string() +}) + +export const getDeviceConfigSourceConfigByIdQueryParams = zod.object({ + "format": zod.string().optional(), + "startEpoch": zod.number().optional(), + "fields": zod.string().optional() +}) + +export const getDeviceConfigSourceConfigByIdResponse = zod.object({ + "instanceName": zod.string().optional().describe('Device datasource instance name'), + "deviceDataSourceId": zod.number().optional().describe('Device datasource id'), + "excludeLines": zod.array(zod.number().describe('advanceDiffChecker')).optional().describe('advanceDiffChecker'), + "configStatus": zod.number().optional().describe('Configuration file collect status'), + "comparedWith": zod.string().optional().describe('Version compared with and found difference'), + "version": zod.number().optional().describe('Config version'), + "deviceId": zod.number().optional().describe('Device id'), + "deltaConfig": zod.array(zod.object({ + "rowNo": zod.number().optional().describe('Diff row number'), + "type": zod.string().optional().describe('Diff type. The values can be : add|remove'), + "content": zod.string().optional().describe('Configuration content') +}).describe('Configuration file diff')).optional().describe('Configuration file diff'), + "deviceDisplayName": zod.string().optional().describe('Device display name'), + "dataSourceName": zod.string().optional().describe('Datasource name'), + "alerts": zod.array(zod.object({ + "alertLevel": zod.number().optional().describe('Alert level, 0 - alert is cleared, 2 - warn alert, 3 - error alert, 4 - critical alert'), + "id": zod.string().optional().describe('Alert id'), + "alertId": zod.string().optional().describe('Alert internal id'), + "alertSummary": zod.string().optional().describe('Summary of this config source alert'), + "timestamp": zod.number().optional().describe('Timestamp of alert start or clear') +}).describe('Alerts associated to this configuration file')).optional().describe('Alerts associated to this configuration file'), + "dataSourceId": zod.number().optional().describe('Configsource id'), + "instanceId": zod.number().optional().describe('Device datasource instance id'), + "configErrMsg": zod.string().optional().describe('Configuration file collect error message'), + "changeStatus": zod.string().optional().describe('Configuration file change status, if the first configuration then it is Added, else Changed, values can be : Add|Change '), + "id": zod.string().optional().describe('The id of the datasource'), + "pollTimestamp": zod.number().optional().describe('Datasource poll timestamp in milliseconds'), + "config": zod.string().optional().describe('Configuration file content') +}) + + +/** + * get device group datasource list + * @summary get device group datasource list + */ +export const getDeviceGroupDatasourceListParams = zod.object({ + "deviceGroupId": zod.number() +}) + +export const getDeviceGroupDatasourceListQuerySizeDefault = 50;export const getDeviceGroupDatasourceListQueryOffsetDefault = 0; + +export const getDeviceGroupDatasourceListQueryParams = zod.object({ + "includeDisabledDataSourceWithoutInstance": zod.boolean().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceGroupDatasourceListQuerySizeDefault), + "offset": zod.number().default(getDeviceGroupDatasourceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceGroupDatasourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource'), + "dataSourceId": zod.number().optional().describe('The ID of the DataSource'), + "dataSourceGroupName": zod.string().optional().describe('The DataSource Group name'), + "deviceGroupId": zod.number().optional().describe('The ID of the Device Group for the DataSource'), + "dataSourceDisplayName": zod.string().optional().describe('The Display Name of the DataSource'), + "disableAlerting": zod.boolean().optional().describe('Boolean flag for enabling/disabling alerting for DataSource'), + "dataSourceName": zod.string().optional().describe('The Name of the DataSource'), + "dataSourceType": zod.string().optional().describe('The Type of the DataSource') +})).optional() +}) + + +/** + * view storage accounts + * @summary view storage accounts + */ +export const verifyStorageAccountsPermissionsBody = zod.object({ + "clientId": zod.string().optional(), + "secretKey": zod.string().optional(), + "chinaAccount": zod.boolean().optional(), + "groupId": zod.number().optional(), + "tenantId": zod.string().optional(), + "storageAccountName": zod.string().optional(), + "storageAccountContainerName": zod.string().optional(), + "isChinaAccount": zod.boolean().optional() +}) + +export const verifyStorageAccountsPermissionsResponse = zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}) + + +/** + * Retrieve a specific audit log by its ID + * @summary Get audit log by id + */ +export const getAuditLogByIdParams = zod.object({ + "id": zod.string() +}) + +export const getAuditLogByIdResponse = zod.object({ + "happenedOnLocal": zod.string().optional().describe('The date and time that the action recorded in the access log entry occurred'), + "ip": zod.string().optional().describe('The IP address that the action was performed from'), + "happenedOn": zod.number().optional().describe('The time, in epoch seconds, that the action recorded in the access log entry occurred'), + "description": zod.string().optional().describe('The description of the action recorded in the access log entry'), + "id": zod.string().optional().describe('The Id of the access log entry'), + "username": zod.string().optional().describe('The username associated with the user that performed the action recorded in the access log entry ') +}) + + +/** + * Trigger a diagnostic module for host. + * @summary Trigger a diagnostic module for host. + */ +export const executeDiagnosticsManuallyBody = zod.object({ + "diagnosticId": zod.number().describe('The diagnostic module id'), + "hostId": zod.number().describe('The host id'), + "alertId": zod.string().describe('The alert id'), + "hostDiagnosticSourceId": zod.number().describe('The diagnostic module id') +}).describe('Represents a diagnostic execution for a host in the LogicMonitor system.') + +export const executeDiagnosticsManuallyResponse = zod.object({ + "executionId": zod.string().optional().describe('execution Id '), + "diagnosticId": zod.number().describe('The diagnostic module id'), + "executionStatus": zod.string().describe('The diagnostic module id'), + "hostId": zod.number().describe('The host id'), + "alertId": zod.string().describe('The alert id'), + "triggerType": zod.string().describe('type of trigger'), + "hostDiagnosticSourceId": zod.number().describe('The diagnostic module id') +}).describe('Represents a diagnostic execution for a host in the LogicMonitor system.') + + +/** + * Add a new device datasource instance group + * @summary Add device datasource instance group + */ +export const addDeviceDatasourceInstanceGroupParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number() +}) + +export const addDeviceDatasourceInstanceGroupBody = zod.object({ + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group') +}) + +export const addDeviceDatasourceInstanceGroupResponse = zod.object({ + "deviceDataSourceId": zod.number().optional().describe('The device datasource id'), + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group'), + "createOn": zod.number().optional().describe('Time when the group was created.'), + "id": zod.number().optional().describe('The instance group id'), + "deviceId": zod.number().optional().describe('The id of associated device'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device') +}) + + +/** + * Retrieve a paginated list of device datasource instance groups + * @summary Get device datasource instance group list + */ +export const getDeviceDatasourceInstanceGroupListParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number() +}) + +export const getDeviceDatasourceInstanceGroupListQuerySizeDefault = 50;export const getDeviceDatasourceInstanceGroupListQueryOffsetDefault = 0; + +export const getDeviceDatasourceInstanceGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceDatasourceInstanceGroupListQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceInstanceGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "deviceDataSourceId": zod.number().optional().describe('The device datasource id'), + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group'), + "createOn": zod.number().optional().describe('Time when the group was created.'), + "id": zod.number().optional().describe('The instance group id'), + "deviceId": zod.number().optional().describe('The id of associated device'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device') +})).optional() +}) + + +/** + * Import a TopologySource using json data + * @summary Import TopologySource via json + */ +export const importTopologySourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importTopologySourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importTopologySourceJsonResponse = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Create a new escalation chain + * @summary Add escalation chain + */ +export const addEscalationChainBody = zod.object({ + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + +export const addEscalationChainResponse = zod.object({ + "inAlerting": zod.boolean().optional().describe('Whether or not chain in alerting'), + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "id": zod.number().optional().describe('The Id of the chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + + +/** + * Retrieve a paginated list of escalation chains + * @summary Get escalation chain list + */ +export const getEscalationChainListQuerySizeDefault = 50;export const getEscalationChainListQueryOffsetDefault = 0; + +export const getEscalationChainListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getEscalationChainListQuerySizeDefault), + "offset": zod.number().default(getEscalationChainListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getEscalationChainListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "inAlerting": zod.boolean().optional().describe('Whether or not chain in alerting'), + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "id": zod.number().optional().describe('The Id of the chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +})).optional() +}) + + +/** + * Update an existing applies to function + * @summary Update applies to function + */ +export const patchAppliesToFunctionParams = zod.object({ + "id": zod.number() +}) + +export const patchAppliesToFunctionQueryParams = zod.object({ + "reason": zod.string().optional(), + "ignoreReference": zod.boolean().optional() +}) + +export const patchAppliesToFunctionBody = zod.object({ + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const patchAppliesToFunctionResponseIdMin = 0; + + + +export const patchAppliesToFunctionResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(patchAppliesToFunctionResponseIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +}) + + +/** + * Retrieve a specific applies to function using its ID + * @summary Get applies to function by ID + */ +export const getAppliesToFunctionByIdParams = zod.object({ + "id": zod.number() +}) + +export const getAppliesToFunctionByIdResponseIdMin = 0; + + + +export const getAppliesToFunctionByIdResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(getAppliesToFunctionByIdResponseIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +}) + + +/** + * Delete a specific applies to function by its ID + * @summary Delete applies to function + */ +export const deleteAppliesToFunctionByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteAppliesToFunctionByIdQueryParams = zod.object({ + "ignoreReference": zod.boolean().optional() +}) + +export const deleteAppliesToFunctionByIdResponse = zod.object({ + +}) + + +/** + * Update an existing applies to function + * @summary Update applies to function + */ +export const updateAppliesToFunctionParams = zod.object({ + "id": zod.number() +}) + +export const updateAppliesToFunctionQueryParams = zod.object({ + "reason": zod.string().optional(), + "ignoreReference": zod.boolean().optional() +}) + +export const updateAppliesToFunctionBody = zod.object({ + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const updateAppliesToFunctionResponseIdMin = 0; + + + +export const updateAppliesToFunctionResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(updateAppliesToFunctionResponseIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +}) + + +/** + * Get filter matched devices with new deltaId + * @summary Get filter matched devices with new deltaId + */ +export const getDeltaIdWithDevicesQueryParams = zod.object({ + "deltaId": zod.string().optional() +}) + +export const getDeltaIdWithDevicesResponse = zod.object({ + "total": zod.number().optional(), + "deltaId": zod.string().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "status": zod.string().optional().describe('Delta status it can be added|updated|deleted or empty for no delta'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +})).optional() +}) + + +/** + * Import a PropertySource using json data + * @summary Import PropertySource via json + */ +export const importPropertySourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importPropertySourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importPropertySourceJsonResponse = zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + + +/** + * Retrieve the AWS external ID + * @summary Get AWS external ID + */ +export const getAwsExternalIdResponse = zod.object({ + "createdAt": zod.string().optional(), + "externalId": zod.string().optional() +}) + + +/** + * Get delta devices using deltaId + * @summary Get delta devices using deltaId + */ +export const getDeltaDevicesParams = zod.object({ + "deltaId": zod.string() +}) + +export const getDeltaDevicesResponse = zod.object({ + "total": zod.number().optional(), + "deltaId": zod.string().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "status": zod.string().optional().describe('Delta status it can be added|updated|deleted or empty for no delta'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +})).optional() +}) + + +/** + * Add a new property to a specific device group + * @summary Add device group property + */ +export const addDeviceGroupPropertyParams = zod.object({ + "gid": zod.number().describe('group ID') +}) + +export const addDeviceGroupPropertyBody = zod.object({ + +}) + +export const addDeviceGroupPropertyResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Retrieve a paginated list of properties for a specific device group + * @summary Get device group properties + */ +export const getDeviceGroupPropertyListParams = zod.object({ + "gid": zod.number().describe('group ID') +}) + +export const getDeviceGroupPropertyListQuerySizeDefault = 50;export const getDeviceGroupPropertyListQueryOffsetDefault = 0; + +export const getDeviceGroupPropertyListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceGroupPropertyListQuerySizeDefault), + "offset": zod.number().default(getDeviceGroupPropertyListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceGroupPropertyListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +})).optional() +}) + + +/** + * Create a new report + * @summary Add report + */ +export const addReportBody = zod.object({ + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "name": zod.string().describe('The name of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + +export const addReportResponse = zod.object({ + "lastmodifyUserId": zod.number().optional().describe('The Id of the user that last modified the report'), + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "userPermission": zod.string().optional().describe('The permissions associated with the user who made the API call'), + "lastGenerateOn": zod.number().optional().describe('The time, in epoch format, that the report was last generated'), + "reportLinkNum": zod.number().optional().describe('The number of links associated with the report, where each link corresponds to a generated report'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "lastGenerateSize": zod.number().optional().describe('The size of the report, in Bytes, the last time it was generated'), + "customReportTypeId": zod.number().optional().describe('The id of the custom report template, if the report is a custom report. An id of 0 indicates that the report is not a custom report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "lastGeneratePages": zod.number().optional().describe('The number of pages in the report, the last time it was generated'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "customReportTypeName": zod.string().optional().describe('The name of the custom report template'), + "name": zod.string().describe('The name of the report'), + "enableViewAsOtherUser": zod.boolean().optional().describe('Whether or not other users are allowed to view the report as the user who last modified the report'), + "lastmodifyUserName": zod.string().optional().describe('The username of the user that last modified the report'), + "id": zod.number().optional().describe('The id of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + + +/** + * Retrieve a paginated list of reports + * @summary Get report list + */ +export const getReportListQuerySizeDefault = 50;export const getReportListQueryOffsetDefault = 0; + +export const getReportListQueryParams = zod.object({ + "showNextGenReports": zod.boolean().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getReportListQuerySizeDefault), + "offset": zod.number().default(getReportListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getReportListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "lastmodifyUserId": zod.number().optional().describe('The Id of the user that last modified the report'), + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "userPermission": zod.string().optional().describe('The permissions associated with the user who made the API call'), + "lastGenerateOn": zod.number().optional().describe('The time, in epoch format, that the report was last generated'), + "reportLinkNum": zod.number().optional().describe('The number of links associated with the report, where each link corresponds to a generated report'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "lastGenerateSize": zod.number().optional().describe('The size of the report, in Bytes, the last time it was generated'), + "customReportTypeId": zod.number().optional().describe('The id of the custom report template, if the report is a custom report. An id of 0 indicates that the report is not a custom report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "lastGeneratePages": zod.number().optional().describe('The number of pages in the report, the last time it was generated'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "customReportTypeName": zod.string().optional().describe('The name of the custom report template'), + "name": zod.string().describe('The name of the report'), + "enableViewAsOtherUser": zod.boolean().optional().describe('Whether or not other users are allowed to view the report as the user who last modified the report'), + "lastmodifyUserName": zod.string().optional().describe('The username of the user that last modified the report'), + "id": zod.number().optional().describe('The id of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +})).optional() +}) + + +/** + * add collector + * @summary add collector + */ +export const addCollectorBody = zod.object({ + "numberOfInstances": zod.number().optional(), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "collectorList": zod.string().optional(), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "description": zod.string().optional().describe('The Collector\'s description'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "errorMsg": zod.string().optional(), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over') +}) + +export const addCollectorResponse = zod.object({ + "userChangeOn": zod.number().optional().describe('The last time the Collector was updated, in epoch format'), + "confVersion": zod.string().optional().describe('The version of the agent.conf configuration file'), + "downloadUrl": zod.string().optional().describe('Download Url'), + "updatedOnLocal": zod.string().optional().describe('The time that the Collector was last updated, in local time format'), + "collectorType": zod.string().optional().describe('Collector type'), + "encodedConfigData": zod.string().optional().describe('Base 64 encoded config data'), + "hostname": zod.string().optional().describe('The hostname of the device the Collector is installed on'), + "numberOfInstances": zod.number().optional(), + "id": zod.number().optional().describe('The id of the Collector'), + "ea": zod.boolean().optional().describe('Whether the collector is in EA version'), + "watchdogUpdatedOnLocal": zod.string().optional().describe('The time that the Collector Watchdog was last updated, in local time format'), + "hasFailOverDevice": zod.boolean().optional().describe('Whether the collector has failover devices'), + "collectorGroupName": zod.string().optional().describe('The name of the group the Collector is in'), + "netscanVersion": zod.string().optional().describe('The Netscan version associated with the Collector'), + "inSDT": zod.boolean().optional().describe('The SDT status of the collector'), + "isEncoded": zod.boolean().optional(), + "format": zod.string().optional().describe('External collector installation format'), + "updatedOn": zod.number().optional().describe('The time that the Collector was last updated, in epoch format'), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "numberOfHosts": zod.number().optional().describe('The number of devices monitored by the Collector'), + "collectorList": zod.string().optional(), + "collectorConf": zod.string().optional().describe('The Collector\'s configuration file'), + "sbproxyConf": zod.string().optional().describe('The Proxy\'s configuration'), + "agentConfFields": zod.record(zod.string(), zod.string().describe('This is key value pairs of collector config properties')).optional().describe('This is key value pairs of collector config properties'), + "userVisibleWebsitesNum": zod.number().optional().describe('The number of websites monitored by the Collector and visible to the user that made the query'), + "lastSentNotificationOnLocal": zod.string().optional().describe('The time that a notification was last sent for this Collector, in local time format'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "predefinedConfig": zod.object({ + +}).optional().describe('Collector configurations'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "wrapperConf": zod.string().optional().describe('The java service wrapper\'s configuration'), + "clearSent": zod.boolean().optional().describe('Whether or not an alert clear notifcation has been sent for this Collector'), + "isLmlogsSyslogEnabled": zod.boolean().optional().describe('Whether collector has isLmlogsSyslogEnabled flag set as true'), + "status": zod.number().optional().describe('The registration status of the Collector. Acceptable values are: 0= unregistered, 1= registered, 2= stopped, 3= suspended'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "isAdminAccount": zod.boolean().optional().describe('Whether Collector is using an administrative account'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "collectorSize": zod.string().optional().describe('The size of the collector'), + "ackedOnLocal": zod.string().optional().describe('The time that the Collector was acknowledged (if it is in alert), in local time format'), + "watchdogConf": zod.string().optional().describe('The Watchdog\'s configuration'), + "description": zod.string().optional().describe('The Collector\'s description'), + "createdOn": zod.number().optional().describe('The time that the Collector was created, in epoch format'), + "platform": zod.string().optional().describe('The OS of the Collector device (e.g. Linux, Windows)'), + "isDown": zod.boolean().optional().describe('Whether or not the Collector is currently down'), + "userVisibleHostsNum": zod.number().optional().describe('The number of devices monitored by the Collector and visible to the user that made the query'), + "canDowngrade": zod.boolean().optional().describe('Whether the collector can be downgraded to a lower version'), + "ackComment": zod.string().optional().describe('The comment associated with the Collector acknowledgement (if it is in alert and acknowledged)'), + "nextUpgradeInfo": zod.object({ + "upgradeTime": zod.string().optional(), + "stable": zod.boolean().optional(), + "majorVersion": zod.number().optional(), + "minorVersion": zod.number().optional(), + "mandatory": zod.boolean().optional(), + "upgradeTimeEpoch": zod.number().optional() +}).optional().describe('The details of the Collector\'s next upgrade, if one has been scheduled'), + "enableLMLogs": zod.boolean().optional().describe('Usage of the Otel Collector - logging or tracing'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "nextRecipient": zod.number().optional().describe('The Id of the next recipient to which alert notifications will be sent'), + "ackedOn": zod.number().optional().describe('The epoch at which the Collector was acknowledged (if it is in alert)'), + "userChangeOnLocal": zod.string().optional().describe('The last time the Collector was updated, in the account time zone'), + "numberOfWebsites": zod.number().optional().describe('The number of websites monitored by the Collector'), + "collectorDeviceId": zod.number().optional().describe('The device id of the collector device'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the Collector (if it is in alert)'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request to get Collector information'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "watchdogUpdatedOn": zod.number().optional().describe('The time that the Watchdog Services was last updated, in epoch format'), + "canDowngradeReason": zod.string().optional().describe('The reason why the collector can be downgraded'), + "lastSentNotificationOn": zod.number().optional().describe('The time, in epoch format, that a notification was last sent for the Collector'), + "syntheticsEnabled": zod.boolean().optional().describe('Whether the collector can monitor Synthetic devices (Selenium grid property must be defined)'), + "acked": zod.boolean().optional().describe('Whether or not the Collector is currently acknowledged'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "websiteConf": zod.string().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "copyUrl": zod.string().optional().describe('Copy Command Url'), + "errorMsg": zod.string().optional(), + "upTime": zod.number().optional().describe('The time the Collector has been up, in seconds'), + "otelVersion": zod.string().optional().describe('Collector Version'), + "numberOfSDTs": zod.number().optional().describe('The number of Collectors Sdts '), + "bearerToken": zod.string().optional().describe('Bearer Token'), + "build": zod.string().optional().describe('The Collector version'), + "previousVersion": zod.string().optional().describe('The previous version of the collector, used for downgrading'), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "createdOnLocal": zod.string().optional().describe('The time that the Collector was created, in local time format'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "arch": zod.string().optional().describe('The collector architecture (Windows | Linux platform followed by 32 | 64 bit)'), + "otelId": zod.string().optional().describe('Collector Id'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "config": zod.string().optional().describe('Collector Config') +}) + + +/** + * get collector list + * @summary get collector list + */ +export const getCollectorListQuerySizeDefault = 50;export const getCollectorListQueryOffsetDefault = 0; + +export const getCollectorListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getCollectorListQuerySizeDefault), + "offset": zod.number().default(getCollectorListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getCollectorListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "userChangeOn": zod.number().optional().describe('The last time the Collector was updated, in epoch format'), + "confVersion": zod.string().optional().describe('The version of the agent.conf configuration file'), + "downloadUrl": zod.string().optional().describe('Download Url'), + "updatedOnLocal": zod.string().optional().describe('The time that the Collector was last updated, in local time format'), + "collectorType": zod.string().optional().describe('Collector type'), + "encodedConfigData": zod.string().optional().describe('Base 64 encoded config data'), + "hostname": zod.string().optional().describe('The hostname of the device the Collector is installed on'), + "numberOfInstances": zod.number().optional(), + "id": zod.number().optional().describe('The id of the Collector'), + "ea": zod.boolean().optional().describe('Whether the collector is in EA version'), + "watchdogUpdatedOnLocal": zod.string().optional().describe('The time that the Collector Watchdog was last updated, in local time format'), + "hasFailOverDevice": zod.boolean().optional().describe('Whether the collector has failover devices'), + "collectorGroupName": zod.string().optional().describe('The name of the group the Collector is in'), + "netscanVersion": zod.string().optional().describe('The Netscan version associated with the Collector'), + "inSDT": zod.boolean().optional().describe('The SDT status of the collector'), + "isEncoded": zod.boolean().optional(), + "format": zod.string().optional().describe('External collector installation format'), + "updatedOn": zod.number().optional().describe('The time that the Collector was last updated, in epoch format'), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "numberOfHosts": zod.number().optional().describe('The number of devices monitored by the Collector'), + "collectorList": zod.string().optional(), + "collectorConf": zod.string().optional().describe('The Collector\'s configuration file'), + "sbproxyConf": zod.string().optional().describe('The Proxy\'s configuration'), + "agentConfFields": zod.record(zod.string(), zod.string().describe('This is key value pairs of collector config properties')).optional().describe('This is key value pairs of collector config properties'), + "lastSentNotificationOnLocal": zod.string().optional().describe('The time that a notification was last sent for this Collector, in local time format'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "predefinedConfig": zod.object({ + +}).optional().describe('Collector configurations'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "wrapperConf": zod.string().optional().describe('The java service wrapper\'s configuration'), + "clearSent": zod.boolean().optional().describe('Whether or not an alert clear notifcation has been sent for this Collector'), + "isLmlogsSyslogEnabled": zod.boolean().optional().describe('Whether collector has isLmlogsSyslogEnabled flag set as true'), + "status": zod.number().optional().describe('The registration status of the Collector. Acceptable values are: 0= unregistered, 1= registered, 2= stopped, 3= suspended'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "isAdminAccount": zod.boolean().optional().describe('Whether Collector is using an administrative account'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "collectorSize": zod.string().optional().describe('The size of the collector'), + "ackedOnLocal": zod.string().optional().describe('The time that the Collector was acknowledged (if it is in alert), in local time format'), + "watchdogConf": zod.string().optional().describe('The Watchdog\'s configuration'), + "description": zod.string().optional().describe('The Collector\'s description'), + "createdOn": zod.number().optional().describe('The time that the Collector was created, in epoch format'), + "platform": zod.string().optional().describe('The OS of the Collector device (e.g. Linux, Windows)'), + "isDown": zod.boolean().optional().describe('Whether or not the Collector is currently down'), + "userVisibleHostsNum": zod.number().optional().describe('The number of devices monitored by the Collector and visible to the user that made the query'), + "canDowngrade": zod.boolean().optional().describe('Whether the collector can be downgraded to a lower version'), + "ackComment": zod.string().optional().describe('The comment associated with the Collector acknowledgement (if it is in alert and acknowledged)'), + "nextUpgradeInfo": zod.object({ + "upgradeTime": zod.string().optional(), + "stable": zod.boolean().optional(), + "majorVersion": zod.number().optional(), + "minorVersion": zod.number().optional(), + "mandatory": zod.boolean().optional(), + "upgradeTimeEpoch": zod.number().optional() +}).optional().describe('The details of the Collector\'s next upgrade, if one has been scheduled'), + "enableLMLogs": zod.boolean().optional().describe('Usage of the Otel Collector - logging or tracing'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "nextRecipient": zod.number().optional().describe('The Id of the next recipient to which alert notifications will be sent'), + "ackedOn": zod.number().optional().describe('The epoch at which the Collector was acknowledged (if it is in alert)'), + "userChangeOnLocal": zod.string().optional().describe('The last time the Collector was updated, in the account time zone'), + "collectorDeviceId": zod.number().optional().describe('The device id of the collector device'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the Collector (if it is in alert)'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request to get Collector information'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "watchdogUpdatedOn": zod.number().optional().describe('The time that the Watchdog Services was last updated, in epoch format'), + "canDowngradeReason": zod.string().optional().describe('The reason why the collector can be downgraded'), + "lastSentNotificationOn": zod.number().optional().describe('The time, in epoch format, that a notification was last sent for the Collector'), + "syntheticsEnabled": zod.boolean().optional().describe('Whether the collector can monitor Synthetic devices (Selenium grid property must be defined)'), + "acked": zod.boolean().optional().describe('Whether or not the Collector is currently acknowledged'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "copyUrl": zod.string().optional().describe('Copy Command Url'), + "errorMsg": zod.string().optional(), + "upTime": zod.number().optional().describe('The time the Collector has been up, in seconds'), + "otelVersion": zod.string().optional().describe('Collector Version'), + "numberOfSDTs": zod.number().optional().describe('The number of Collectors Sdts '), + "bearerToken": zod.string().optional().describe('Bearer Token'), + "build": zod.string().optional().describe('The Collector version'), + "previousVersion": zod.string().optional().describe('The previous version of the collector, used for downgrading'), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "createdOnLocal": zod.string().optional().describe('The time that the Collector was created, in local time format'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "arch": zod.string().optional().describe('The collector architecture (Windows | Linux platform followed by 32 | 64 bit)'), + "otelId": zod.string().optional().describe('Collector Id'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "config": zod.string().optional().describe('Collector Config') +})).optional() +}) + + +/** + * Retrieves the list of recommendation categories + * @summary Get recommendation category list + */ +export const getRecommendationCategoriesListQuerySizeDefault = 50;export const getRecommendationCategoriesListQueryOffsetDefault = 0; + +export const getRecommendationCategoriesListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getRecommendationCategoriesListQuerySizeDefault), + "offset": zod.number().default(getRecommendationCategoriesListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getRecommendationCategoriesListResponse = zod.object({ + "name": zod.string().optional().describe('Name of the recommendation category'), + "description": zod.string().optional().describe('Description of the recommendation category') +}) + + +/** + * update a device + * @summary update a device + */ +export const patchDeviceParams = zod.object({ + "id": zod.number() +}) + +export const patchDeviceQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "opType": zod.string().optional(), + "needStcGrpAndSortedCP": zod.boolean().optional() +}) + +export const patchDeviceBody = zod.object({ + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "name": zod.string().describe('The host name or IP address of the device'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "displayName": zod.string().describe('The display name of the device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "description": zod.string().optional().describe('The device description'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + +export const patchDeviceResponse = zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + + +/** + * get device by id + * @summary get device by id + */ +export const getDeviceByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDeviceByIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "needStcGrpAndSortedCP": zod.boolean().optional(), + "fields": zod.string().optional() +}) + +export const getDeviceByIdResponse = zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + + +/** + * delete a device + * @summary delete a device + */ +export const deleteDeviceByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDeviceByIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "deleteHard": zod.boolean().optional() +}) + +export const deleteDeviceByIdResponse = zod.object({ + +}) + + +/** + * update a device + * @summary update a device + */ +export const updateDeviceParams = zod.object({ + "id": zod.number() +}) + +export const updateDeviceQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "opType": zod.string().optional(), + "needStcGrpAndSortedCP": zod.boolean().optional() +}) + +export const updateDeviceBody = zod.object({ + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "name": zod.string().describe('The host name or IP address of the device'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "displayName": zod.string().describe('The display name of the device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "description": zod.string().optional().describe('The device description'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + +export const updateDeviceResponse = zod.object({ + "logCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s log collection'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device'), + "type": zod.string().optional().describe('Used to distinguish Uptime Device Request'), + "netflowCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s netflow collector'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this device that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this device that are granted to the user who made the API request'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any system properties (aside from system.categories) defined for this device'), + "isPreferredLogCollectorConfigured": zod.boolean().optional().describe('Indicates whether Preferred Log Collector is configured (true) or not (false) for the device'), + "hostStatus": zod.string().optional().describe('The status of this device, where possible statuses are normal, dead and dead-collector'), + "autoBalancedCollectorGroupId": zod.number().optional().describe('The Auto Balanced Collector Group id. 0 means not monitored by ABCG'), + "inheritedProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any properties inherit from parents'), + "id": zod.number().optional().describe('The Id of the device'), + "syntheticsCollectorIds": zod.array(zod.number().describe('The list of ids of the collectors currently monitoring the resource and discovering instances')).optional().describe('The list of ids of the collectors currently monitoring the resource and discovering instances'), + "upTimeInSeconds": zod.number().optional().describe('The uptime of the device in seconds. This value will always be the largest value reported by the following datasources:\nHost Uptime-\nSNMPUptime-\nSNMP_Engine_Uptime-\nWinSystemUptime-\nNimbleUptime-'), + "deviceType": zod.number().optional().describe('The type of device: 0 indicates a regular device, 1 indicates an APPGROUP device, 2 indicates an AWS device, 3 indicates a service device, 4 indicates an Azure device, 6 indicates a biz_service device, 7 indicates a GCP device, 8 indicates K8S device'), + "currentCollectorId": zod.number().optional().describe('The id of the collector currently monitoring the device and discovering instances'), + "netflowCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "autoPropsAssignedOn": zod.number().optional().describe('The time, in epoch seconds format, that properties were first discovered for this device'), + "updatedOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was last updated'), + "preferredCollectorGroupId": zod.number().optional().describe('The id of the Collector Group associated with the device\'s preferred collector'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "collectorDescription": zod.string().optional().describe('The description/name of the collector for this device'), + "preferredCollectorId": zod.number().describe('The Id of the preferred collector assigned to monitor the device'), + "lastRawdataTime": zod.number().optional().describe('The last time, in epoch seconds, that raw Netflow data was reported'), + "name": zod.string().describe('The host name or IP address of the device'), + "deletedTimeInMs": zod.number().optional().describe('The time in milliseconds that the device has been dead for, or since the AWS device was filtered out'), + "netflowCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s netflow collector'), + "azureState": zod.number().optional().describe('The Azure instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "relatedDeviceId": zod.number().optional().describe('The Id of the AWS EC2 instance related to this device, if one exists in the LogicMonitor account. This value defaults to -1, which indicates that there are no related devices'), + "logCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s.'), + "displayName": zod.string().describe('The display name of the device'), + "logCollectorDescription": zod.string().optional().describe('The description/name of the log collector for this device'), + "link": zod.string().optional().describe('The URL link associated with the device'), + "awsState": zod.number().optional().describe('The AWS instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated'), + "description": zod.string().optional().describe('The device description'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device was added to your LogicMonitor account'), + "gcpState": zod.number().optional().describe('The GCP instance state (if applicable): 1 indicates that the instance is running, 2 indicates that the instance is stopped and 3 the instance is terminated.'), + "autoPropsUpdatedOn": zod.number().optional().describe('The time, in epoch seconds, that auto properties last ran and updated the properties table for this device'), + "scanConfigId": zod.number().optional().describe('The Id of the netscan configuration which was used to discover this device. 0 indicates that the device was not discovered by a scan'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device'), + "lastDataTime": zod.number().optional().describe('The last time, in epoch seconds, that the device received Netflow data'), + "hostGroupIds": zod.string().optional().describe('The Id(s) of the groups the device is in, where multiple group ids are comma separated'), + "resourceIds": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any non-system properties (aside from system.categories) defined for this device'), + "op": zod.string().optional().describe('whether to use AND or OR for device matching'), + "currentLogCollectorId": zod.number().optional().describe('The id of the Log collector currently collecting logs.'), + "logCollectorId": zod.number().optional().describe('The Id of the netflow collector associated with the device'), + "netflowCollectorDescription": zod.string().optional().describe('The description/name of the netflow collector for this device'), + "userPermission": zod.string().optional().describe('The read and/or write permissions for this device that are granted to the user who made the API request'), + "preferredCollectorGroupName": zod.string().optional().describe('The name of the Collector Group associated with the device\'s preferred collector'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any auto properties assigned to the device'), + "toDeleteTimeInMs": zod.number().optional().describe('The number of milliseconds until the device will be automatically deleted from your LogicMonitor account (a value of zero indicates that a future delete time/date has not been scheduled)'), + "containsMultiValue": zod.boolean().optional().describe('request contains multi value field') +}) + + +/** + * get contract info by company + * @summary get contract info by company + */ +export const getContractInfoByCompanyResponse = zod.object({ + "childProducts": zod.array(zod.object({ + "childProducts": zod.array(zod.unknown()).optional(), + "product": zod.string().optional(), + "unit": zod.array(zod.string()).optional(), + "subscriptions": zod.array(zod.object({ + "quantity": zod.number().optional(), + "feature": zod.string().optional(), + "sku": zod.string().optional() +})).optional(), + "aggregationType": zod.string().optional(), + "quantity": zod.array(zod.number()).optional(), + "feature": zod.string().optional(), + "roundingRequired": zod.boolean().optional(), + "unpaid": zod.boolean().optional(), + "category": zod.string().optional() +})).optional(), + "product": zod.string().optional(), + "unit": zod.array(zod.string()).optional(), + "quantity": zod.array(zod.number()).optional(), + "feature": zod.string().optional(), + "roundingRequired": zod.boolean().optional(), + "unpaid": zod.boolean().optional() +}) + + +/** + * get a list of alert settings for a device datasource instance + * @summary get a list of alert settings for a device datasource instance + */ +export const getDeviceDatasourceInstanceAlertSettingListOfDSIParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('Device-DataSource ID'), + "instanceId": zod.number() +}) + +export const getDeviceDatasourceInstanceAlertSettingListOfDSIQuerySizeDefault = 50;export const getDeviceDatasourceInstanceAlertSettingListOfDSIQueryOffsetDefault = 0; + +export const getDeviceDatasourceInstanceAlertSettingListOfDSIQueryParams = zod.object({ + "size": zod.number().default(getDeviceDatasourceInstanceAlertSettingListOfDSIQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceInstanceAlertSettingListOfDSIQueryOffsetDefault) +}) + +export const getDeviceDatasourceInstanceAlertSettingListOfDSIResponse = zod.object({ + "items": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional().describe('The global alert expression for this datapoint'), + "parentInstanceGroupAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 ( 1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Instance group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional().describe('The description of the datapoint the alert settings apply to'), + "globalEnableAnomalyAlertGeneration": zod.string().optional().describe('The global enable anomaly alert generation'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "disableDpAlertHostGroups": zod.string().optional().describe('The group full path lists who disable alert for this datapoint on devicegroup level'), + "dataPointName": zod.string().optional().describe('The name of the datapoint the alert settings apply to'), + "dataPointId": zod.number().optional().describe('The id of the Datapoint alert settings apply to'), + "globalEnableAnomalyAlertSuppression": zod.string().optional().describe('The global enable anomaly alert suppression'), + "deviceGroupId": zod.number().optional().describe('The ID of the device group'), + "id": zod.number().optional().describe('The id of this alert setting'), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "parentResourceDataSourceAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.string().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "resourceDatasourceId": zod.number().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Resource datasource alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "deviceGroupFullPath": zod.string().optional().describe('The full path of the device group'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "dataSourceInstanceId": zod.number().optional().describe('The id of the DataSource instance alert settings apply to'), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "parentDeviceGroupAlertExprList": zod.array(zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance')).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertingDisabledOn": zod.string().optional().describe('The datapoint is effected alert disabled by which group'), + "dataSourceInstanceAlias": zod.string().optional().describe('The alias (name) of the DataSource instance the alert settings apply to'), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +})).optional() +}) + + +/** + * get device instance graph data + * @summary get device instance graph data + */ +export const getDeviceDatasourceInstanceGraphDataParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number(), + "graphId": zod.number() +}) + +export const getDeviceDatasourceInstanceGraphDataQueryParams = zod.object({ + "start": zod.number().optional(), + "end": zod.number().optional(), + "format": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceGraphDataResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * Update an existing JobMonitor by its ID + * @summary Update JobMonitor + */ +export const patchJobMonitorParams = zod.object({ + "id": zod.number() +}) + +export const patchJobMonitorQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchJobMonitorBody = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const patchJobMonitorResponse = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Retrieve a specific JobMonitor using its ID + * @summary Get JobMonitor by ID + */ +export const getJobMonitorByIdParams = zod.object({ + "id": zod.number() +}) + +export const getJobMonitorByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getJobMonitorByIdResponse = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Delete a specific JobMonitor by its ID + * @summary Delete JobMonitor + */ +export const deleteJobMonitorParams = zod.object({ + "id": zod.number() +}) + +export const deleteJobMonitorResponse = zod.object({ + +}) + + +/** + * Update an existing JobMonitor by its ID + * @summary Update JobMonitor + */ +export const updateJobMonitorParams = zod.object({ + "id": zod.number() +}) + +export const updateJobMonitorQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateJobMonitorBody = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const updateJobMonitorResponse = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Retrieves the list of integration audit logs + * @summary Get integration audit logs list + */ +export const getIntegrationAuditLogsQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getIntegrationAuditLogsResponse = zod.object({ + "items": zod.array(zod.object({ + "headers": zod.string().optional().describe('HTTP request headers used in alert delivery'), + "alertType": zod.number().optional().describe('The type of the alert'), + "integrationName": zod.string().optional().describe('The name of integration'), + "numRetries": zod.number().optional().describe('The number of times delivery was retried'), + "integrationAlertStatus": zod.string().optional().describe('The Integration Alert Status used for delivery'), + "errorMessage": zod.string().optional().describe('Error message (if any) from ADC'), + "externalTicketId": zod.string().optional().describe('The parsed External Ticket ID from alert delivery'), + "payloadFormat": zod.string().optional().describe('The outbound payload format'), + "url": zod.string().optional().describe('The URL where the alert was delivered to'), + "happenedOnMs": zod.number().optional().describe('When the delivery result was saved in LMES'), + "integrationType": zod.string().optional().describe('The type of integration'), + "alertInstanceId": zod.string().optional().describe('The id of the alert instance'), + "payload": zod.string().optional().describe('The HTTP Request payload'), + "httpResponseCode": zod.number().optional().describe('The HTTP Response Code received from 3rd party API'), + "id": zod.string().optional().describe('The id of audit log record'), + "alertId": zod.string().optional().describe('The id of the alert'), + "httpResponse": zod.string().optional().describe('The HTTP Response Body received after alert delivery') +})).optional() +}) + + +/** + * get netflow flows + * @summary get netflow flows + */ +export const getNetflowFlowListParams = zod.object({ + "id": zod.number() +}) + +export const getNetflowFlowListQuerySizeDefault = 50;export const getNetflowFlowListQueryOffsetDefault = 0; + +export const getNetflowFlowListQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getNetflowFlowListQuerySizeDefault), + "offset": zod.number().default(getNetflowFlowListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getNetflowFlowListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "srcIP": zod.string().optional().describe('the source ip of flow record'), + "percentUsage": zod.number().optional().describe('the percent traffic of the flow record'), + "lastEpochInSec": zod.number().optional().describe('the end time of this flow record'), + "ifOut": zod.number().optional().describe('the out interface of this flow record'), + "dataType": zod.string().optional(), + "usage": zod.number().optional().describe('the total bytes of this flow record (source bytes + destination bytes)'), + "srcASN": zod.number().optional().describe('source autonomous system number'), + "dstDNS": zod.string().optional().describe('the dns name of destination ip'), + "srcPort": zod.number().optional().describe('the source port of the flow record'), + "firstEpochInSec": zod.number().optional().describe('the start time of this flow record'), + "protocol": zod.string().optional().describe('the protocol name of this flow record'), + "dstPort": zod.number().optional().describe('the destination port'), + "ifIn": zod.number().optional().describe('the in interface of this flow record'), + "sourceMBytes": zod.number().optional().describe('the source bytes of this flow record'), + "srcAsnName": zod.string().optional().describe('the name of src ASN number'), + "srcDNS": zod.string().optional().describe('the dns name of source ip'), + "destinationMBytes": zod.number().optional().describe('the destination byte of this flow record'), + "dstASN": zod.number().optional().describe('destination autonomous system number'), + "dstIP": zod.string().optional().describe('the destination ip of the flow record'), + "destAsnName": zod.string().optional().describe('the name of dest ASN number') +})).optional() +}) + + +/** + * Update a specific recipient group by its ID + * @summary Update recipient group + */ +export const patchRecipientGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchRecipientGroupByIdBody = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group') +}) + +export const patchRecipientGroupByIdResponse = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group'), + "id": zod.number().optional() +}) + + +/** + * Retrieve a specific recipient group by its ID + * @summary Get recipient group by id + */ +export const getRecipientGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getRecipientGroupByIdResponse = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group'), + "id": zod.number().optional() +}) + + +/** + * Delete a specific recipient group by its ID + * @summary Delete recipient group + */ +export const deleteRecipientGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteRecipientGroupByIdResponse = zod.object({ + +}) + + +/** + * Update a specific recipient group by its ID + * @summary Update recipient group + */ +export const updateRecipientGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateRecipientGroupByIdBody = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group') +}) + +export const updateRecipientGroupByIdResponse = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group'), + "id": zod.number().optional() +}) + + +/** + * get a list of alert settings for a device + * @summary get a list of alert settings for a device + */ +export const getDeviceDatasourceInstanceAlertSettingListOfDeviceParams = zod.object({ + "deviceId": zod.number() +}) + +export const getDeviceDatasourceInstanceAlertSettingListOfDeviceQuerySizeDefault = 50;export const getDeviceDatasourceInstanceAlertSettingListOfDeviceQueryOffsetDefault = 0; + +export const getDeviceDatasourceInstanceAlertSettingListOfDeviceQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "size": zod.number().default(getDeviceDatasourceInstanceAlertSettingListOfDeviceQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceInstanceAlertSettingListOfDeviceQueryOffsetDefault) +}) + +export const getDeviceDatasourceInstanceAlertSettingListOfDeviceResponse = zod.object({ + "items": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional().describe('The global alert expression for this datapoint'), + "parentInstanceGroupAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 ( 1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Instance group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional().describe('The description of the datapoint the alert settings apply to'), + "globalEnableAnomalyAlertGeneration": zod.string().optional().describe('The global enable anomaly alert generation'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "disableDpAlertHostGroups": zod.string().optional().describe('The group full path lists who disable alert for this datapoint on devicegroup level'), + "dataPointName": zod.string().optional().describe('The name of the datapoint the alert settings apply to'), + "dataPointId": zod.number().optional().describe('The id of the Datapoint alert settings apply to'), + "globalEnableAnomalyAlertSuppression": zod.string().optional().describe('The global enable anomaly alert suppression'), + "deviceGroupId": zod.number().optional().describe('The ID of the device group'), + "id": zod.number().optional().describe('The id of this alert setting'), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "parentResourceDataSourceAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.string().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "resourceDatasourceId": zod.number().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Resource datasource alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "deviceGroupFullPath": zod.string().optional().describe('The full path of the device group'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "dataSourceInstanceId": zod.number().optional().describe('The id of the DataSource instance alert settings apply to'), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "parentDeviceGroupAlertExprList": zod.array(zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance')).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertingDisabledOn": zod.string().optional().describe('The datapoint is effected alert disabled by which group'), + "dataSourceInstanceAlias": zod.string().optional().describe('The alias (name) of the DataSource instance the alert settings apply to'), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +})).optional() +}) + + +/** + * Update website. Request structure may vary based on the check type {PingCheck | WebCheck model}. Use the respective model in SDK. + * @summary update website + */ +export const patchWebsiteByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchWebsiteByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const patchWebsiteByIdBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location') +}) + +export const patchWebsiteByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +}) + + +/** + * get website by id + * @summary get website by id + */ +export const getWebsiteByIdParams = zod.object({ + "id": zod.number() +}) + +export const getWebsiteByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getWebsiteByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +}) + + +/** + * delete website + * @summary delete website + */ +export const deleteWebsiteByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteWebsiteByIdResponse = zod.object({ + +}) + + +/** + * Update website. Request structure may vary based on the check type {PingCheck | WebCheck model}. Use the respective model in SDK. + * @summary update website + */ +export const updateWebsiteByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateWebsiteByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const updateWebsiteByIdBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location') +}) + +export const updateWebsiteByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +}) + + +/** + * Map a module to an access group + * @summary Create a mapping of access group & module + */ +export const mapUnMapModuleToAccessGroupBody = zod.object({ + "success": zod.array(zod.number().describe('The Module Id\'s mapped successfully')).optional().describe('The Module Id\'s mapped successfully'), + "failure": zod.array(zod.string().describe('The Module Id\'s not mapped successfully')).optional().describe('The Module Id\'s not mapped successfully'), + "mappingDetails": zod.array(zod.object({ + "accessgroups": zod.array(zod.number().describe('Id\'s of the access group')).describe('Id\'s of the access group'), + "moduletype": zod.string().describe('Type of module'), + "moduleid": zod.number().describe('Id of the logic module') +}).describe('Can provide module id, module type and access group for mapping')).describe('Can provide module id, module type and access group for mapping') +}) + +export const mapUnMapModuleToAccessGroupResponse = zod.object({ + "success": zod.array(zod.number().describe('The Module Id\'s mapped successfully')).optional().describe('The Module Id\'s mapped successfully'), + "failure": zod.array(zod.string().describe('The Module Id\'s not mapped successfully')).optional().describe('The Module Id\'s not mapped successfully'), + "mappingDetails": zod.array(zod.object({ + "accessgroups": zod.array(zod.number().describe('Id\'s of the access group')).describe('Id\'s of the access group'), + "moduletype": zod.string().describe('Type of module'), + "moduleid": zod.number().describe('Id of the logic module') +}).describe('Can provide module id, module type and access group for mapping')).describe('Can provide module id, module type and access group for mapping') +}) + + +/** + * Adds a new log source + * @summary Add log source + */ +export const addLogSourceBody = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().optional().describe('The log source name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + +export const addLogSourceResponse = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + + +/** + * Retrieves a list of log sources + * @summary Get log source list + */ +export const getLogSourceListQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getLogSourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +})).optional() +}) + + +/** + * Add a new report group + * @summary Add report group + */ +export const addReportGroupBody = zod.object({ + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description') +}) + +export const addReportGroupResponse = zod.object({ + "matchedReportCount": zod.number().optional().describe('The matched reports count of this group'), + "userPermission": zod.string().optional().describe('The user permission on the report group'), + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description'), + "id": zod.number().optional().describe('The report group id'), + "reportsCount": zod.number().optional().describe('The reports count of this group') +}) + + +/** + * Retrieve a paginated list of report groups + * @summary Get report group list + */ +export const getReportGroupListQuerySizeDefault = 50;export const getReportGroupListQueryOffsetDefault = 0; + +export const getReportGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getReportGroupListQuerySizeDefault), + "offset": zod.number().default(getReportGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getReportGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "matchedReportCount": zod.number().optional().describe('The matched reports count of this group'), + "userPermission": zod.string().optional().describe('The user permission on the report group'), + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description'), + "id": zod.number().optional().describe('The report group id'), + "reportsCount": zod.number().optional().describe('The reports count of this group') +})).optional() +}) + + +/** + * Update the details of a specific role by its ID + * @summary Update role + */ +export const patchRoleByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchRoleByIdBody = zod.object({ + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "name": zod.string().describe('The name of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + +export const patchRoleByIdResponse = zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + + +/** + * Retrieve details of a specific role by its ID + * @summary Get role by ID + */ +export const getRoleByIdParams = zod.object({ + "id": zod.number() +}) + +export const getRoleByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getRoleByIdResponse = zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + + +/** + * Delete a specific role by its ID + * @summary Delete role + */ +export const deleteRoleByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteRoleByIdResponse = zod.object({ + +}) + + +/** + * Update the details of a specific role by its ID + * @summary Update role + */ +export const updateRoleByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateRoleByIdBody = zod.object({ + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "name": zod.string().describe('The name of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + +export const updateRoleByIdResponse = zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + + +/** + * Add cluster alert configuration + * @summary Add cluster alert configuration + */ +export const addDeviceGroupClusterAlertConfParams = zod.object({ + "deviceGroupId": zod.number() +}) + +export const addDeviceGroupClusterAlertConfBody = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + +export const addDeviceGroupClusterAlertConfResponse = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataPointName": zod.string().optional().describe('The name of the dataPoint you want to base the cluster alert on'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "dataPointId": zod.number().optional().describe('The id of the dataPoint you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "id": zod.number().optional().describe('The id of the cluster alert configuration'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "dataPointDescription": zod.string().optional().describe('The description of the dataPoint you want to base the cluster alert on'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + + +/** + * get a list of cluster alert configurations for a device group + * @summary get a list of cluster alert configurations for a device group + */ +export const getDeviceGroupClusterAlertConfListParams = zod.object({ + "deviceGroupId": zod.number() +}) + +export const getDeviceGroupClusterAlertConfListQuerySizeDefault = 50;export const getDeviceGroupClusterAlertConfListQueryOffsetDefault = 0; + +export const getDeviceGroupClusterAlertConfListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceGroupClusterAlertConfListQuerySizeDefault), + "offset": zod.number().default(getDeviceGroupClusterAlertConfListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceGroupClusterAlertConfListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataPointName": zod.string().optional().describe('The name of the dataPoint you want to base the cluster alert on'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "dataPointId": zod.number().optional().describe('The id of the dataPoint you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "id": zod.number().optional().describe('The id of the cluster alert configuration'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "dataPointDescription": zod.string().optional().describe('The description of the dataPoint you want to base the cluster alert on'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +})).optional() +}) + + +/** + * update device group + * @summary update device group + */ +export const patchDeviceGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchDeviceGroupByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const patchDeviceGroupByIdBody = zod.object({ + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "name": zod.string().describe('The name of the device group') +}) + +export const patchDeviceGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "numOfAWSDevices": zod.number().optional().describe('The number of AWS devices that belong to this device group (includes AWS devices in sub groups)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "gcpTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "numOfKubernetesDevices": zod.number().optional().describe('The number of kubernetes devices that belong to this device group (includes Kubernetes devices in sub groups)'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device group was created'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "hasNetflowEnabledDevices": zod.boolean().optional().describe('Whether if any Netflow enabled devices in this device group'), + "numOfAzureDevices": zod.number().optional().describe('The number of Azure devices that belong to this device group (includes Azure devices in sub groups)'), + "ociTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "propertyChangeWarningMessage": zod.string().optional().describe('Warning message if Parent Property of system.tenant.identifier is changed for a group'), + "defaultCollectorDescription": zod.string().optional().describe('The description of the default collector assigned to the device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "awsTestResult": zod.object({ + "warnings": zod.array(zod.enum(['CLIENT_ID_ISSUE', 'TENANT_ID_ISSUE', 'KEY_ISSUE', 'SUBSCRIPTION_ID_ISSUE', 'SERVICE_NAME_ERROR', 'TEMPORARY_WARNING', 'SERVICE_MEMBER_LIMIT_EXCEEDED', 'PROJECT_ID_ISSUE', 'CLIENT_EMAIL_ISSUE', 'TOKEN_URI_ISSUE', 'ROLE_ARN_ISSUE', 'PERMISSION_TEST_BYPASSED', 'POLICY_OR_NAME_ISSUE', 'SERVICE_PERMISION_FAILURE', 'MISSING_REQUIRED_CREDENTIAL_DATA', 'MISSING_CREDENTIALS', 'MISSING_SUBSCRIPTION_IDS', 'NO_SERVICES_CHECKED', 'MAXIMUM_RECORDS_EXCEEDED', 'FILTER_UNUSED', 'ID_NOT_FOUND', 'TYPE_INVALID', 'ID_INVALID', 'INVALID_TIME_RANGE', 'UNAUTHORIZED', 'OPTIONAL_FIELD_NOT_FOUND', 'EXTRA_FIELDS_PROVIDED', 'DEFAULT_COLUMNS_FILTER', 'SAAS_O365_EXTRA_PERMISSION', 'SAAS_O365_API_INACCESSIBLE', 'SAAS_O365_NO_PERMISSION_GRANTED', 'PATCH_NOT_ALLOWED_ON_READ_ONLY', 'PATCH_NOT_ALLOWED_ON_MULTI', 'IGNORED_COMPONENT_OF_PAYLOAD', 'INVALID_FIELD_VALUE', 'NO_ALERT_RULE_MATCHES_THIS_ALERT', 'INVALID_PROPERTY_NAMES_IGNORED', 'NO_STAGE_1_RECEIPIENTS_DEFINED_FOR_ALERT', 'NO_ESCALATING_CHAIN_MATCHES_THIS_ALERT', 'ASSUMED_TYPE', 'NO_DATA_FOR_MODEL', 'GET_INTEGRATION_FAIL', 'DASHBOARDS_NOT_CREATED', 'MISSING_PERMISSION_OR_MISSING_DATAPOINT', 'DISABLED_CLOUD_TYPE', 'SERVICE_API_DISABLED', 'ALERT_GENERATION_DISABLED', 'ALERT_GENERATION_DISABLED_WITH_NAME'])).optional(), + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The String result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "subGroups": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "description": zod.string().optional().describe('The description of the device group'), + "ociRegionsInfo": zod.string().optional(), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "name": zod.string().optional().describe('The name of the device group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}).describe('The child device groups within this device group')).optional().describe('The child device groups within this device group'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "azureTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "effectiveAlertEnabled": zod.boolean().optional().describe('Whether or not alerting is effectively disabled for this device group (alerting may be disabled at a higher level, e.g. parent group)'), + "defaultCollectorGroupDescription": zod.string().optional().describe('The description of the default collector group assigned to the device group'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "numOfOciDevices": zod.number().optional(), + "ociRegionsInfo": zod.string().optional(), + "saasTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the SaaS credentials associated with the SaaS group'), + "defaultCollectorGroupId": zod.number().optional().describe('The collector group id of the default collector assigned to the device group'), + "groupStatus": zod.string().optional().describe('normal | dead \nThe status of this device group, where possible statuses are normal and dead. A group with a status of dead may indicate that one or more devices are dead within the group'), + "numOfGcpDevices": zod.number().optional(), + "azureTestResult": zod.object({ + "noPermissionServices": zod.object({ + +}).optional(), + "detailLink": zod.object({ + +}).optional() +}).optional().describe('The String result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "awsTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "saasTestResult": zod.object({ + "nonPermissionApisErrors": zod.array(zod.string()).optional(), + "invalidStatusUrls": zod.string().optional(), + "noPermissionService": zod.string().optional(), + "resultCode": zod.number().optional(), + "detailLink": zod.string().optional(), + "noPermissionApis": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the SaaS credentials associated with the Saas group'), + "name": zod.string().describe('The name of the device group'), + "ociTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "gcpTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}) + + +/** + * get device group + * @summary get device group + */ +export const getDeviceGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDeviceGroupByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "numOfAWSDevices": zod.number().optional().describe('The number of AWS devices that belong to this device group (includes AWS devices in sub groups)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "gcpTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "numOfKubernetesDevices": zod.number().optional().describe('The number of kubernetes devices that belong to this device group (includes Kubernetes devices in sub groups)'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device group was created'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "hasNetflowEnabledDevices": zod.boolean().optional().describe('Whether if any Netflow enabled devices in this device group'), + "numOfAzureDevices": zod.number().optional().describe('The number of Azure devices that belong to this device group (includes Azure devices in sub groups)'), + "ociTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "propertyChangeWarningMessage": zod.string().optional().describe('Warning message if Parent Property of system.tenant.identifier is changed for a group'), + "defaultCollectorDescription": zod.string().optional().describe('The description of the default collector assigned to the device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "awsTestResult": zod.object({ + "warnings": zod.array(zod.enum(['CLIENT_ID_ISSUE', 'TENANT_ID_ISSUE', 'KEY_ISSUE', 'SUBSCRIPTION_ID_ISSUE', 'SERVICE_NAME_ERROR', 'TEMPORARY_WARNING', 'SERVICE_MEMBER_LIMIT_EXCEEDED', 'PROJECT_ID_ISSUE', 'CLIENT_EMAIL_ISSUE', 'TOKEN_URI_ISSUE', 'ROLE_ARN_ISSUE', 'PERMISSION_TEST_BYPASSED', 'POLICY_OR_NAME_ISSUE', 'SERVICE_PERMISION_FAILURE', 'MISSING_REQUIRED_CREDENTIAL_DATA', 'MISSING_CREDENTIALS', 'MISSING_SUBSCRIPTION_IDS', 'NO_SERVICES_CHECKED', 'MAXIMUM_RECORDS_EXCEEDED', 'FILTER_UNUSED', 'ID_NOT_FOUND', 'TYPE_INVALID', 'ID_INVALID', 'INVALID_TIME_RANGE', 'UNAUTHORIZED', 'OPTIONAL_FIELD_NOT_FOUND', 'EXTRA_FIELDS_PROVIDED', 'DEFAULT_COLUMNS_FILTER', 'SAAS_O365_EXTRA_PERMISSION', 'SAAS_O365_API_INACCESSIBLE', 'SAAS_O365_NO_PERMISSION_GRANTED', 'PATCH_NOT_ALLOWED_ON_READ_ONLY', 'PATCH_NOT_ALLOWED_ON_MULTI', 'IGNORED_COMPONENT_OF_PAYLOAD', 'INVALID_FIELD_VALUE', 'NO_ALERT_RULE_MATCHES_THIS_ALERT', 'INVALID_PROPERTY_NAMES_IGNORED', 'NO_STAGE_1_RECEIPIENTS_DEFINED_FOR_ALERT', 'NO_ESCALATING_CHAIN_MATCHES_THIS_ALERT', 'ASSUMED_TYPE', 'NO_DATA_FOR_MODEL', 'GET_INTEGRATION_FAIL', 'DASHBOARDS_NOT_CREATED', 'MISSING_PERMISSION_OR_MISSING_DATAPOINT', 'DISABLED_CLOUD_TYPE', 'SERVICE_API_DISABLED', 'ALERT_GENERATION_DISABLED', 'ALERT_GENERATION_DISABLED_WITH_NAME'])).optional(), + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The String result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "subGroups": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "description": zod.string().optional().describe('The description of the device group'), + "ociRegionsInfo": zod.string().optional(), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "name": zod.string().optional().describe('The name of the device group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}).describe('The child device groups within this device group')).optional().describe('The child device groups within this device group'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "azureTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "effectiveAlertEnabled": zod.boolean().optional().describe('Whether or not alerting is effectively disabled for this device group (alerting may be disabled at a higher level, e.g. parent group)'), + "defaultCollectorGroupDescription": zod.string().optional().describe('The description of the default collector group assigned to the device group'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "numOfOciDevices": zod.number().optional(), + "ociRegionsInfo": zod.string().optional(), + "saasTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the SaaS credentials associated with the SaaS group'), + "defaultCollectorGroupId": zod.number().optional().describe('The collector group id of the default collector assigned to the device group'), + "groupStatus": zod.string().optional().describe('normal | dead \nThe status of this device group, where possible statuses are normal and dead. A group with a status of dead may indicate that one or more devices are dead within the group'), + "numOfGcpDevices": zod.number().optional(), + "azureTestResult": zod.object({ + "noPermissionServices": zod.object({ + +}).optional(), + "detailLink": zod.object({ + +}).optional() +}).optional().describe('The String result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "awsTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "saasTestResult": zod.object({ + "nonPermissionApisErrors": zod.array(zod.string()).optional(), + "invalidStatusUrls": zod.string().optional(), + "noPermissionService": zod.string().optional(), + "resultCode": zod.number().optional(), + "detailLink": zod.string().optional(), + "noPermissionApis": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the SaaS credentials associated with the Saas group'), + "name": zod.string().describe('The name of the device group'), + "ociTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "gcpTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}) + + +/** + * delete device group + * @summary delete device group + */ +export const deleteDeviceGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDeviceGroupByIdQueryParams = zod.object({ + "deleteChildren": zod.boolean().optional(), + "deleteHard": zod.boolean().optional() +}) + +export const deleteDeviceGroupByIdResponse = zod.object({ + +}) + + +/** + * update device group + * @summary update device group + */ +export const updateDeviceGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateDeviceGroupByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const updateDeviceGroupByIdBody = zod.object({ + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "name": zod.string().describe('The name of the device group') +}) + +export const updateDeviceGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "numOfAWSDevices": zod.number().optional().describe('The number of AWS devices that belong to this device group (includes AWS devices in sub groups)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "gcpTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "numOfKubernetesDevices": zod.number().optional().describe('The number of kubernetes devices that belong to this device group (includes Kubernetes devices in sub groups)'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device group was created'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "hasNetflowEnabledDevices": zod.boolean().optional().describe('Whether if any Netflow enabled devices in this device group'), + "numOfAzureDevices": zod.number().optional().describe('The number of Azure devices that belong to this device group (includes Azure devices in sub groups)'), + "ociTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "propertyChangeWarningMessage": zod.string().optional().describe('Warning message if Parent Property of system.tenant.identifier is changed for a group'), + "defaultCollectorDescription": zod.string().optional().describe('The description of the default collector assigned to the device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "awsTestResult": zod.object({ + "warnings": zod.array(zod.enum(['CLIENT_ID_ISSUE', 'TENANT_ID_ISSUE', 'KEY_ISSUE', 'SUBSCRIPTION_ID_ISSUE', 'SERVICE_NAME_ERROR', 'TEMPORARY_WARNING', 'SERVICE_MEMBER_LIMIT_EXCEEDED', 'PROJECT_ID_ISSUE', 'CLIENT_EMAIL_ISSUE', 'TOKEN_URI_ISSUE', 'ROLE_ARN_ISSUE', 'PERMISSION_TEST_BYPASSED', 'POLICY_OR_NAME_ISSUE', 'SERVICE_PERMISION_FAILURE', 'MISSING_REQUIRED_CREDENTIAL_DATA', 'MISSING_CREDENTIALS', 'MISSING_SUBSCRIPTION_IDS', 'NO_SERVICES_CHECKED', 'MAXIMUM_RECORDS_EXCEEDED', 'FILTER_UNUSED', 'ID_NOT_FOUND', 'TYPE_INVALID', 'ID_INVALID', 'INVALID_TIME_RANGE', 'UNAUTHORIZED', 'OPTIONAL_FIELD_NOT_FOUND', 'EXTRA_FIELDS_PROVIDED', 'DEFAULT_COLUMNS_FILTER', 'SAAS_O365_EXTRA_PERMISSION', 'SAAS_O365_API_INACCESSIBLE', 'SAAS_O365_NO_PERMISSION_GRANTED', 'PATCH_NOT_ALLOWED_ON_READ_ONLY', 'PATCH_NOT_ALLOWED_ON_MULTI', 'IGNORED_COMPONENT_OF_PAYLOAD', 'INVALID_FIELD_VALUE', 'NO_ALERT_RULE_MATCHES_THIS_ALERT', 'INVALID_PROPERTY_NAMES_IGNORED', 'NO_STAGE_1_RECEIPIENTS_DEFINED_FOR_ALERT', 'NO_ESCALATING_CHAIN_MATCHES_THIS_ALERT', 'ASSUMED_TYPE', 'NO_DATA_FOR_MODEL', 'GET_INTEGRATION_FAIL', 'DASHBOARDS_NOT_CREATED', 'MISSING_PERMISSION_OR_MISSING_DATAPOINT', 'DISABLED_CLOUD_TYPE', 'SERVICE_API_DISABLED', 'ALERT_GENERATION_DISABLED', 'ALERT_GENERATION_DISABLED_WITH_NAME'])).optional(), + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The String result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "subGroups": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "description": zod.string().optional().describe('The description of the device group'), + "ociRegionsInfo": zod.string().optional(), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "name": zod.string().optional().describe('The name of the device group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}).describe('The child device groups within this device group')).optional().describe('The child device groups within this device group'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "azureTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "effectiveAlertEnabled": zod.boolean().optional().describe('Whether or not alerting is effectively disabled for this device group (alerting may be disabled at a higher level, e.g. parent group)'), + "defaultCollectorGroupDescription": zod.string().optional().describe('The description of the default collector group assigned to the device group'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "numOfOciDevices": zod.number().optional(), + "ociRegionsInfo": zod.string().optional(), + "saasTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the SaaS credentials associated with the SaaS group'), + "defaultCollectorGroupId": zod.number().optional().describe('The collector group id of the default collector assigned to the device group'), + "groupStatus": zod.string().optional().describe('normal | dead \nThe status of this device group, where possible statuses are normal and dead. A group with a status of dead may indicate that one or more devices are dead within the group'), + "numOfGcpDevices": zod.number().optional(), + "azureTestResult": zod.object({ + "noPermissionServices": zod.object({ + +}).optional(), + "detailLink": zod.object({ + +}).optional() +}).optional().describe('The String result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "awsTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "saasTestResult": zod.object({ + "nonPermissionApisErrors": zod.array(zod.string()).optional(), + "invalidStatusUrls": zod.string().optional(), + "noPermissionService": zod.string().optional(), + "resultCode": zod.number().optional(), + "detailLink": zod.string().optional(), + "noPermissionApis": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the SaaS credentials associated with the Saas group'), + "name": zod.string().describe('The name of the device group'), + "ociTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "gcpTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}) + + +/** + * Import a OID using json data + * @summary Import OID via json + */ +export const importOidJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importOidJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importOidJsonResponseIdMin = 0; + + + +export const importOidJsonResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(importOidJsonResponseIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +}) + + +/** + * Create a new netscan + * @summary Add a new netscan + */ +export const addNetscanBody = zod.object({ + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + +export const addNetscanResponse = zod.object({ + "creator": zod.string().optional().describe('The user that created the policy'), + "collectorGroupName": zod.string().optional().describe('The name of the group of the Collector associated with this Netscan'), + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "collectorGroup": zod.number().optional().describe('The ID of the group of the Collector associated with this Netscan'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "nextStart": zod.string().optional().describe('The date and time of the next start time of the scan - displayed as manual if the scan does not run on a schedule'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "ignoreSystemIPsDuplicates": zod.boolean().optional().describe('Ignore system.ips when checking for duplicate resources'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "collectorDescription": zod.string().optional().describe('The description of the Collector associated with this Netscan'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nextStartEpoch": zod.number().optional().describe('The epoch of the next start time of the scan - displayed as 0 if the scan does not run on a schedule'), + "id": zod.number().optional().describe('The ID of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + + +/** + * Retrieve a list of netscans + * @summary Get netscan list + */ +export const getNetscanListQuerySizeDefault = 50;export const getNetscanListQueryOffsetDefault = 0; + +export const getNetscanListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getNetscanListQuerySizeDefault), + "offset": zod.number().default(getNetscanListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getNetscanListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "creator": zod.string().optional().describe('The user that created the policy'), + "collectorGroupName": zod.string().optional().describe('The name of the group of the Collector associated with this Netscan'), + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "collectorGroup": zod.number().optional().describe('The ID of the group of the Collector associated with this Netscan'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "nextStart": zod.string().optional().describe('The date and time of the next start time of the scan - displayed as manual if the scan does not run on a schedule'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "ignoreSystemIPsDuplicates": zod.boolean().optional().describe('Ignore system.ips when checking for duplicate resources'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "collectorDescription": zod.string().optional().describe('The description of the Collector associated with this Netscan'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nextStartEpoch": zod.number().optional().describe('The epoch of the next start time of the scan - displayed as 0 if the scan does not run on a schedule'), + "id": zod.number().optional().describe('The ID of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +})).optional() +}) + + +/** + * update website group + * @summary update website group + */ +export const patchWebsiteGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchWebsiteGroupByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const patchWebsiteGroupByIdBody = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "name": zod.string().describe('The name of the group'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + +export const patchWebsiteGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the group'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request. The values can be write|read|ack'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "hasWebsitesDisabled": zod.boolean().optional().describe('Indicates if there are websites disabled in this group'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "rolePrivileges": zod.array(zod.string().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold')).optional().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "numOfDirectWebsites": zod.number().optional().describe('The number of direct websites in this group'), + "name": zod.string().describe('The name of the group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of direct website groups in this group (excluding those in subgroups)'), + "id": zod.number().optional().describe('The Id of the group'), + "numOfWebsites": zod.number().optional().describe('The number of websites in the service group, including the websites in sub groups'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + + +/** + * get website group + * @summary get website group + */ +export const getWebsiteGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getWebsiteGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the group'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request. The values can be write|read|ack'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "hasWebsitesDisabled": zod.boolean().optional().describe('Indicates if there are websites disabled in this group'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "rolePrivileges": zod.array(zod.string().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold')).optional().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "numOfDirectWebsites": zod.number().optional().describe('The number of direct websites in this group'), + "name": zod.string().describe('The name of the group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of direct website groups in this group (excluding those in subgroups)'), + "id": zod.number().optional().describe('The Id of the group'), + "numOfWebsites": zod.number().optional().describe('The number of websites in the service group, including the websites in sub groups'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + + +/** + * delete website group + * @summary delete website group + */ +export const deleteWebsiteGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteWebsiteGroupByIdQueryParams = zod.object({ + "deleteChildren": zod.number().optional() +}) + +export const deleteWebsiteGroupByIdResponse = zod.object({ + +}) + + +/** + * update website group + * @summary update website group + */ +export const updateWebsiteGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateWebsiteGroupByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const updateWebsiteGroupByIdBody = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "name": zod.string().describe('The name of the group'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + +export const updateWebsiteGroupByIdResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the group'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request. The values can be write|read|ack'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "hasWebsitesDisabled": zod.boolean().optional().describe('Indicates if there are websites disabled in this group'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "rolePrivileges": zod.array(zod.string().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold')).optional().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "numOfDirectWebsites": zod.number().optional().describe('The number of direct websites in this group'), + "name": zod.string().describe('The name of the group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of direct website groups in this group (excluding those in subgroups)'), + "id": zod.number().optional().describe('The Id of the group'), + "numOfWebsites": zod.number().optional().describe('The number of websites in the service group, including the websites in sub groups'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + + +/** + * Update the details of an existing OID + * @summary Update an OID + */ +export const patchOIDParams = zod.object({ + "id": zod.number() +}) + +export const patchOIDBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const patchOIDResponseIdMin = 0; + + + +export const patchOIDResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(patchOIDResponseIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +}) + + +/** + * Retrieve the OID details by its ID + * @summary Get OID by ID + */ +export const getOidByIdParams = zod.object({ + "id": zod.number() +}) + +export const getOidByIdResponseIdMin = 0; + + + +export const getOidByIdResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(getOidByIdResponseIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +}) + + +/** + * Delete an existing OID from the system + * @summary Delete an OID + */ +export const deleteOIDParams = zod.object({ + "id": zod.number() +}) + +export const deleteOIDResponse = zod.object({ + +}) + + +/** + * Update the details of an existing OID + * @summary Update an OID + */ +export const updateOIDParams = zod.object({ + "id": zod.number() +}) + +export const updateOIDBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const updateOIDResponseIdMin = 0; + + + +export const updateOIDResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(updateOIDResponseIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +}) + + +/** + * Retrieves a list of recommendations + * @summary Get recommendation list + */ +export const getRecommendationsListQuerySizeDefault = 50;export const getRecommendationsListQueryOffsetDefault = 0; + +export const getRecommendationsListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getRecommendationsListQuerySizeDefault).describe('The number of recommendations to return. Max permitted value is 500'), + "offset": zod.number().default(getRecommendationsListQueryOffsetDefault), + "filter": zod.string().optional().describe('Filtering is available with the : (equals) operator for recommendationStatus and recommendationCategory. Only one value at a time is supported for recommendationCategory, but multiple recommendationStatuses may be filtered on with the | (OR) operator. Also, only the , (AND) relation is supported when combining multiple filters') +}) + +export const getRecommendationsListResponse = zod.object({ + "resourceDisplayName": zod.string().optional().describe('Display name of the resource associated with the recommendation'), + "resourceId": zod.number().optional().describe('ID of the resource associated with the recommendation'), + "providerConsoleUrl": zod.string().optional().describe('URL to the resource in the cloud provider\'s console'), + "annualSavings": zod.number().optional().describe('Potential annual cost savings in USD'), + "recommendationCategory": zod.string().optional().describe('Recommendation category'), + "createdAtMS": zod.number().optional().describe('Date when the recommendation was generated, in epoch milliseconds'), + "criteria": zod.string().optional().describe('Criteria for the recommendation'), + "cloudAccountId": zod.string().optional().describe('ID of the cloud account associated with the recommendation'), + "deviceSubtype": zod.string().optional().describe('Device subtype associated with the recommendation'), + "recommendation": zod.string().optional().describe('Recommendation details'), + "recommendationId": zod.number().optional().describe('Unique numerical identifier for the recommendation'), + "recommendationStatus": zod.string().optional().describe('Status of the recommendation'), + "updatedAtMS": zod.number().optional().describe('Date when the recommendation was last updated, in epoch milliseconds'), + "cloudProvider": zod.string().optional().describe('Cloud provider type associated with the recommendation'), + "cloudServiceType": zod.string().optional().describe('Cloud service type associated with the recommendation'), + "id": zod.string().optional().describe('Unique identifier for the recommendation, including the recommendation category') +}) + + +/** + * add device instance + * @summary add device instance + */ +export const addDeviceDatasourceInstanceParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID') +}) + +export const addDeviceDatasourceInstanceBody = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used') +}) + +export const addDeviceDatasourceInstanceResponse = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +}) + + +/** + * get device instance list + * @summary get device instance list + */ +export const getDeviceDatasourceInstanceListParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID') +}) + +export const getDeviceDatasourceInstanceListQuerySizeDefault = 50;export const getDeviceDatasourceInstanceListQueryOffsetDefault = 0; + +export const getDeviceDatasourceInstanceListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceDatasourceInstanceListQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceInstanceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +})).optional() +}) + + +/** + * view subscriptions + * @summary view subscriptions + */ +export const discoverSubscriptionsBody = zod.object({ + "clientId": zod.string().optional(), + "secretKey": zod.string().optional(), + "groupId": zod.number().optional(), + "tenantId": zod.string().optional(), + "isChinaAccount": zod.boolean().optional() +}) + +export const discoverSubscriptionsResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "spendingLimit": zod.string().optional(), + "locationPlacementId": zod.string().optional(), + "name": zod.string().optional(), + "tenantId": zod.string().optional(), + "quotaId": zod.string().optional(), + "id": zod.string().optional(), + "state": zod.string().optional(), + "authorizationSource": zod.string().optional() +})).optional() +}) + + +/** + * Retrieve a paginated list of device eventsources + * @summary Get device eventsource list + */ +export const getDeviceEventsourceListParams = zod.object({ + "deviceId": zod.number() +}) + +export const getDeviceEventsourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "eventSourceId": zod.number().optional().describe('event source id'), + "alertStatus": zod.string().optional().describe('alert status'), + "stopMonitoring": zod.boolean().optional().describe('stop monitoring this host event source'), + "eventSourceName": zod.string().optional().describe('event source name defined where creating a event source'), + "disableAlerting": zod.boolean().optional().describe('stop alerting for this host event source'), + "eventSourceDescription": zod.string().optional().describe('event source description defined where creating a event source'), + "eventType": zod.string().optional().describe('event source collector type'), + "deviceId": zod.number().optional().describe('Id of the Device'), + "sdtStatus": zod.string().optional().describe('sdt status, three level sdt status: parent-self-child'), + "deviceDisplayName": zod.string().optional().describe('device display name'), + "groupsDisabledThisSource": zod.array(zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).describe('alerting disabled on which tree node')).optional().describe('All groups that disable this datasource.'), + "eventSourceGroupName": zod.string().optional().describe('event source group name defined where creating a event source'), + "sdtAt": zod.string().optional().describe('sdt on which level, host group or host'), + "alertingDisabledOn": zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).optional().describe('alerting disabled on which tree node'), + "id": zod.number().optional().describe('device event source id'), + "alertStatusPriority": zod.number().optional().describe('the alert status priority, more smaller value more critical '), + "alertDisableStatus": zod.string().optional().describe('alert disable status') +})).optional() +}) + + +/** + * get a list of properties for a website + * @summary get a list of properties for a website + */ +export const getWebsitePropertyListByWebsiteIdParams = zod.object({ + "id": zod.number() +}) + +export const getWebsitePropertyListByWebsiteIdQuerySizeDefault = 50;export const getWebsitePropertyListByWebsiteIdQueryOffsetDefault = 0; + +export const getWebsitePropertyListByWebsiteIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getWebsitePropertyListByWebsiteIdQuerySizeDefault), + "offset": zod.number().default(getWebsitePropertyListByWebsiteIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWebsitePropertyListByWebsiteIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +})).optional() +}) + + +/** + * Execute a Collector debug command + * @summary Execute a Collector debug command + */ +export const executeDebugCommandQueryParams = zod.object({ + "collectorId": zod.number().optional() +}) + +export const executeDebugCommandBody = zod.object({ + "cmdline": zod.string().optional().describe('The debug command to execute') +}) + +export const executeDebugCommandResponse = zod.object({ + "output": zod.string().optional().describe('The value of the debug command'), + "cmdline": zod.string().optional().describe('The debug command to execute'), + "cmdContext": zod.string().optional().describe('The session prefix name'), + "sessionId": zod.string().optional().describe('The session id') +}) + + +/** + * Import a batch job using XML data + * @summary Import batch job via XML + */ +export const importBatchJobBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}) +}) + +export const importBatchJobResponse = zod.object({ + +}) + + +/** + * Retrieves the list of devices associated with a specific datasource + * @summary Get devices associated with a datasource + */ +export const getAssociatedDeviceListByDataSourceIdParams = zod.object({ + "id": zod.number() +}) + +export const getAssociatedDeviceListByDataSourceIdQuerySizeDefault = 50;export const getAssociatedDeviceListByDataSourceIdQueryOffsetDefault = 0; + +export const getAssociatedDeviceListByDataSourceIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAssociatedDeviceListByDataSourceIdQuerySizeDefault), + "offset": zod.number().default(getAssociatedDeviceListByDataSourceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAssociatedDeviceListByDataSourceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "instance": zod.array(zod.object({ + "name": zod.string().optional().describe('Instance name'), + "alias": zod.string().optional().describe('Instance alias'), + "id": zod.number().optional().describe('Instance id') +}).describe('The instance list associated to the datasource')).optional().describe('The instance list associated to the datasource'), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "hasMore": zod.number().optional().describe('Whether has more instance. 0 no more, 1 has more'), + "description": zod.string().optional(), + "id": zod.number().optional(), + "hasActiveInstance": zod.boolean().optional().describe('Whether has active instance.') +})).optional() +}) + + +/** + * Updates a widget. Based on widget type, the request and response may contain additional attributes. Please refer to the models corresponding to specific widget types at the bottom of this page for detailed attributes. + * @summary Update widget + */ +export const patchWidgetByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchWidgetByIdBody = zod.object({ + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + +export const patchWidgetByIdResponse = zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + + +/** + * Retrieves a widget by its ID. Based on widget type, the response may contain additional attributes. Please refer to the models corresponding to specific widget types at the bottom of this page for detailed attributes. + * @summary Get widget by ID + */ +export const getWidgetByIdParams = zod.object({ + "id": zod.number() +}) + +export const getWidgetByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getWidgetByIdResponse = zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + + +/** + * Deletes a widget by its ID + * @summary Delete widget + */ +export const deleteWidgetByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteWidgetByIdResponse = zod.object({ + +}) + + +/** + * Updates a widget. Based on widget type, the request and response may contain additional attributes. Please refer to the models corresponding to specific widget types at the bottom of this page for detailed attributes. + * @summary Update widget + */ +export const updateWidgetByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateWidgetByIdBody = zod.object({ + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + +export const updateWidgetByIdResponse = zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + + +/** + * Import a DiagnosticSource using json data + * @summary Import DiagnosticSource via json + */ +export const importDiagnosticSourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importDiagnosticSourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importDiagnosticSourceJsonResponse = zod.object({ + "source": zod.enum(['REGISTRY', 'LOCAL']).optional(), + "replacementLineageName": zod.string().optional(), + "type": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional(), + "lineageId": zod.string().optional(), + "originVersion": zod.string().optional(), + "isTargetLastPublishedPrivate": zod.boolean().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional(), + "group": zod.string().optional(), + "filterExchangeAccessGroupsIds": zod.array(zod.number()).optional(), + "appliesToScript": zod.string().optional(), + "authorUsername": zod.string().optional(), + "upgradeableRegistryId": zod.string().optional(), + "version": zod.string().optional(), + "script": zod.object({ + "powershellScript": zod.string().optional(), + "linuxScriptFilename": zod.string().optional(), + "windowsUploadScriptContent": zod.string().optional(), + "linuxUploadScriptContent": zod.string().optional(), + "groovyScript": zod.string().optional(), + "windowsScriptFilename": zod.string().optional(), + "linuxArguments": zod.string().optional(), + "windowsArguments": zod.string().optional(), + "windowsUploadScriptBinaryContentChecksum": zod.string().optional(), + "type": zod.enum(['INVALID', 'GROOVY', 'POWERSHELL', 'UPLOADED_FILE', 'PROPERTY']).optional(), + "linuxUploadScriptBinaryContentChecksum": zod.string().optional() +}).optional(), + "tags": zod.array(zod.string()).optional(), + "installedLocalId": zod.string().optional(), + "targetLineageId": zod.string().optional(), + "name": zod.string().optional(), + "authorCompanyUUID": zod.string().optional(), + "originStatus": zod.enum(['CORE', 'BETA', 'DEPRECATED', 'SECURITY_REVIEW', 'LM_ENDORSED', 'COMMUNITY']).optional(), + "locator": zod.string().optional(), + "status": zod.enum(['CORE', 'BETA', 'DEPRECATED', 'SECURITY_REVIEW', 'LM_ENDORSED', 'COMMUNITY']).optional(), + "targetLastPublishedLocator": zod.string().optional(), + "commitMessage": zod.string().optional(), + "originPublishedAtMS": zod.number().optional(), + "targetLastPublishedVersion": zod.string().optional(), + "exchangeAccessGroupsIds": zod.array(zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).describe('SDT target')).optional(), + "description": zod.string().optional(), + "originRegistryIdByInstalledLocalIdMap": zod.record(zod.string(), zod.string()).optional(), + "isPrivate": zod.boolean().optional(), + "localModulesIds": zod.array(zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).describe('SDT target')).optional(), + "targetLastPublishedStatus": zod.enum(['CORE', 'BETA', 'DEPRECATED', 'SECURITY_REVIEW', 'LM_ENDORSED', 'COMMUNITY']).optional(), + "isChangedFromTargetLastPublished": zod.boolean().optional(), + "exchangeChangelogsIds": zod.array(zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).describe('SDT target')).optional(), + "isLatest": zod.boolean().optional(), + "installedOriginRegistryId": zod.string().optional(), + "originRegistryId": zod.string().optional(), + "replacementLineageId": zod.string().optional(), + "checksum": zod.string().optional(), + "installationStatuses": zod.array(zod.enum(['NEW', 'UPGRADED', 'AUDITED', 'OUTDATED', 'INSTALLED', 'CUSTOMIZED', 'CONFLICT', 'PARTIALLY_INSTALLED', 'IS_INSTALLED', 'IS_CUSTOMIZED', 'CAN_INSTALL', 'CAN_UPGRADE', 'CAN_SKIP', 'CAN_DOWNGRADE'])).optional(), + "associatedCounts": zod.object({ + "inUse": zod.boolean().optional() +}).optional(), + "createdAtMS": zod.number().optional(), + "originAuthorNamespace": zod.string().optional(), + "technicalNotes": zod.string().optional(), + "originLocator": zod.string().optional(), + "exchangeChangelogs": zod.array(zod.object({ + "comments": zod.string().optional(), + "updatedAtMS": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional(), + "addressIP": zod.string().optional(), + "username": zod.string().optional() +})).optional(), + "originLineageId": zod.string().optional(), + "isLatestAvailable": zod.boolean().optional(), + "updatedAtMS": zod.number().optional(), + "authorPortalName": zod.string().optional(), + "targetLastPublishedAtMS": zod.number().optional(), + "isInUse": zod.boolean().optional(), + "originName": zod.string().optional() +}) + + +/** + * Update TopologySource + * @summary Update TopologySource + */ +export const patchTopologySourceParams = zod.object({ + "id": zod.number() +}) + +export const patchTopologySourceQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchTopologySourceBody = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The TopologySource name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const patchTopologySourceResponse = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Get TopologySource by id + * @summary Get TopologySource by id + */ +export const getTopologySourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const getTopologySourceByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getTopologySourceByIdResponse = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Delete TopologySource + * @summary Delete TopologySource + */ +export const deleteTopologySourceParams = zod.object({ + "id": zod.number() +}) + +export const deleteTopologySourceResponse = zod.object({ + +}) + + +/** + * Update TopologySource + * @summary Update TopologySource + */ +export const updateTopologySourceParams = zod.object({ + "id": zod.number() +}) + +export const updateTopologySourceQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateTopologySourceBody = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The TopologySource name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const updateTopologySourceResponse = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * test GCP account + * @summary test GCP account + */ +export const testGCPAccountBody = zod.object({ + "serviceAccountKey": zod.string().optional(), + "checkedServices": zod.string().optional(), + "groupId": zod.number().optional(), + "projectId": zod.string().optional() +}) + +export const testGCPAccountResponse = zod.object({ + +}) + + +/** + * Add new API tokens for a specific user + * @summary Add API tokens for a user + */ +export const addApiTokenByAdminIdParams = zod.object({ + "adminId": zod.number() +}) + +export const addApiTokenByAdminIdQueryParams = zod.object({ + "type": zod.string().optional() +}) + +export const addApiTokenByAdminIdBody = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + +export const addApiTokenByAdminIdResponse = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + + +/** + * Retrieve a paginated list of API tokens for a specific user + * @summary Get API tokens for a user + */ +export const getApiTokenListByAdminIdParams = zod.object({ + "adminId": zod.number() +}) + +export const getApiTokenListByAdminIdQuerySizeDefault = 50;export const getApiTokenListByAdminIdQueryOffsetDefault = 0; + +export const getApiTokenListByAdminIdQueryParams = zod.object({ + "type": zod.string().optional(), + "permission": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getApiTokenListByAdminIdQuerySizeDefault), + "offset": zod.number().default(getApiTokenListByAdminIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getApiTokenListByAdminIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional() +}) + + +/** + * Fetch the report associated with a specific task ID + * @summary Get report for task ID + */ +export const fetchReportUsingTaskIdParams = zod.object({ + "id": zod.number(), + "taskId": zod.string() +}) + +export const fetchReportUsingTaskIdResponse = zod.object({ + "reportId": zod.number().describe('The id of the report'), + "taskId": zod.number().describe('The task id of the generating process'), + "resulturl": zod.string().optional().describe('The url of the generated report') +}) + + +/** + * get external api stats info + * @summary get external api stats info + */ +export const getExternalApiStatsResponse = zod.object({ + "summary": zod.string().optional().describe('api\'s summary defined in swagger.json'), + "totalWaitingRequests": zod.number().optional().describe('total waiting requests'), + "totalRejectedGetAPICount": zod.number().optional().describe('Total rejected get API count'), + "totNanoTime": zod.number().optional().describe('total time taken to process requests'), + "totalProcessedRequests": zod.number().optional().describe('total processed requests'), + "totalRequests": zod.number().optional().describe('total requests'), + "api": zod.string().optional().describe('api name'), + "maxNanoTime": zod.number().optional().describe('Max time taken to process a request'), + "tags": zod.array(zod.string().describe('api tags')).optional().describe('api tags') +}) + + +/** + * add SDT (Response may contain extra fields depending upon the type of SDT being added) + * @summary add SDT (Response may contain extra fields depending upon the type of SDT being added) + */ +export const addSDTBody = zod.object({ + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + +export const addSDTResponse = zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + + +/** + * get SDT list + * @summary get SDT list + */ +export const getSDTListQuerySizeDefault = 50;export const getSDTListQueryOffsetDefault = 0; + +export const getSDTListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getSDTListQuerySizeDefault), + "offset": zod.number().default(getSDTListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +})).optional() +}) + + +/** + * Adds a new widget. Based on widget type, the request and response may contain additional attributes. Please refer to the models corresponding to specific widget types at the bottom of this page for detailed attributes. + * @summary Add widget + */ +export const addWidgetBody = zod.object({ + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + +export const addWidgetResponse = zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +}) + + +/** + * Retrieves a list of widgets. Based on widget type, the response may contain additional attributes. Please refer to the models corresponding to specific widget types at the bottom of this page for detailed attributes. + * @summary Get widget list + */ +export const getWidgetListQuerySizeDefault = 50;export const getWidgetListQueryOffsetDefault = 0; + +export const getWidgetListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getWidgetListQuerySizeDefault), + "offset": zod.number().default(getWidgetListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWidgetListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +})).optional() +}) + + +/** + * Acknowledge the alert with the given ID + * @summary Acknowledge alert by ID + */ +export const ackAlertByIdParams = zod.object({ + "id": zod.string() +}) + +export const ackAlertByIdBody = zod.object({ + "ackComment": zod.string().describe('your comment on the alert') +}) + +export const ackAlertByIdResponse = zod.object({ + +}) + + +/** + * get metadata + * @summary get metadata + */ +export const getV4MetadataResponse = zod.object({ + "data": zod.object({ + +}).optional(), + "errmsg": zod.string().optional(), + "ok": zod.unknown().optional(), + "status": zod.number().optional() +}) + + +/** + * get device instance SDT history + * @summary get device instance SDT history + */ +export const getDeviceDatasourceInstanceSDTHistoryParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const getDeviceDatasourceInstanceSDTHistoryQuerySizeDefault = 50;export const getDeviceDatasourceInstanceSDTHistoryQueryOffsetDefault = 0; + +export const getDeviceDatasourceInstanceSDTHistoryQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceDatasourceInstanceSDTHistoryQuerySizeDefault), + "offset": zod.number().default(getDeviceDatasourceInstanceSDTHistoryQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceSDTHistoryResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * get SDTs for a device + * @summary get SDTs for a device + */ +export const getAllSDTListByDeviceIdParams = zod.object({ + "id": zod.number() +}) + +export const getAllSDTListByDeviceIdQuerySizeDefault = 50;export const getAllSDTListByDeviceIdQueryOffsetDefault = 0; + +export const getAllSDTListByDeviceIdQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getAllSDTListByDeviceIdQuerySizeDefault), + "offset": zod.number().default(getAllSDTListByDeviceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAllSDTListByDeviceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +})).optional() +}) + + +/** + * get device instance list + * @summary get device instance list + */ +export const getDeviceInstanceListParams = zod.object({ + "id": zod.number() +}) + +export const getDeviceInstanceListQuerySizeDefault = 50;export const getDeviceInstanceListQueryOffsetDefault = 0; + +export const getDeviceInstanceListQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceInstanceListQuerySizeDefault), + "offset": zod.number().default(getDeviceInstanceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceInstanceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +})).optional() +}) + + +/** + * Add a new DNS mapping + * @summary Add DNS mapping + */ +export const addDNSMappingBody = zod.object({ + "endIp": zod.string().optional(), + "startIp": zod.string().optional(), + "collectorDescription": zod.string().optional(), + "dns": zod.string().optional(), + "collectorId": zod.number().optional(), + "id": zod.number().optional() +}) + +export const addDNSMappingResponse = zod.object({ + "endIp": zod.string().optional(), + "startIp": zod.string().optional(), + "collectorDescription": zod.string().optional(), + "dns": zod.string().optional(), + "collectorId": zod.number().optional(), + "id": zod.number().optional() +}) + + +/** + * Update a specific device datasource instance group by its ID + * @summary Update device datasource instance group + */ +export const patchDeviceDatasourceInstanceGroupByIdParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number(), + "id": zod.number() +}) + +export const patchDeviceDatasourceInstanceGroupByIdBody = zod.object({ + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group') +}) + +export const patchDeviceDatasourceInstanceGroupByIdResponse = zod.object({ + "deviceDataSourceId": zod.number().optional().describe('The device datasource id'), + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group'), + "createOn": zod.number().optional().describe('Time when the group was created.'), + "id": zod.number().optional().describe('The instance group id'), + "deviceId": zod.number().optional().describe('The id of associated device'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device') +}) + + +/** + * Retrieve a specific device datasource instance group by its ID + * @summary Get device datasource instance group + */ +export const getDeviceDatasourceInstanceGroupByIdParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number(), + "id": zod.number() +}) + +export const getDeviceDatasourceInstanceGroupByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceGroupByIdResponse = zod.object({ + "deviceDataSourceId": zod.number().optional().describe('The device datasource id'), + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group'), + "createOn": zod.number().optional().describe('Time when the group was created.'), + "id": zod.number().optional().describe('The instance group id'), + "deviceId": zod.number().optional().describe('The id of associated device'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device') +}) + + +/** + * Update a specific device datasource instance group by its ID + * @summary Update device datasource instance group + */ +export const updateDeviceDatasourceInstanceGroupByIdParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number(), + "id": zod.number() +}) + +export const updateDeviceDatasourceInstanceGroupByIdBody = zod.object({ + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group') +}) + +export const updateDeviceDatasourceInstanceGroupByIdResponse = zod.object({ + "deviceDataSourceId": zod.number().optional().describe('The device datasource id'), + "name": zod.string().describe('Name of the datasource instance group'), + "description": zod.string().optional().describe('The description of the datasource instance group'), + "createOn": zod.number().optional().describe('Time when the group was created.'), + "id": zod.number().optional().describe('The instance group id'), + "deviceId": zod.number().optional().describe('The id of associated device'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device') +}) + + +/** + * Retrieve a paginated list of unmonitored devices + * @summary Get unmonitored device list + */ +export const getUnmonitoredDeviceListQuerySizeDefault = 50;export const getUnmonitoredDeviceListQueryOffsetDefault = 0; + +export const getUnmonitoredDeviceListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getUnmonitoredDeviceListQuerySizeDefault), + "offset": zod.number().default(getUnmonitoredDeviceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getUnmonitoredDeviceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "deviceType": zod.string().optional(), + "nspId": zod.number().optional(), + "forwardIp": zod.string().optional(), + "endDate": zod.string().optional(), + "ip": zod.string().optional(), + "dns": zod.string().optional(), + "collectorId": zod.number().optional(), + "ports": zod.string().optional(), + "nspName": zod.string().optional(), + "deviceStatus": zod.string().optional(), + "manufacturer": zod.string().optional(), + "collectorDescription": zod.string().optional(), + "displayAs": zod.string().optional(), + "sysName": zod.string().optional(), + "nseId": zod.number().optional(), + "id": zod.number().optional(), + "endTimestamp": zod.number().optional(), + "status": zod.string().optional(), + "nseScanId": zod.string().optional() +})).optional() +}) + + +/** + * Adds a new datasource + * @summary Add datasource + */ +export const addDatasourceByIdQueryParams = zod.object({ + "createGraph": zod.boolean().optional() +}) + +export const addDatasourceByIdBody = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + +export const addDatasourceByIdResponse = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + + +/** + * Retrieves a list of datasources + * @summary Get datasource list + */ +export const getDatasourceListQuerySizeDefault = 50;export const getDatasourceListQueryOffsetDefault = 0; + +export const getDatasourceListQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getDatasourceListQuerySizeDefault), + "offset": zod.number().default(getDatasourceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDatasourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +})).optional() +}) + + +/** + * test Azure account + * @summary test Azure account + */ +export const testAzureAccountBody = zod.object({ + "clientId": zod.string().optional(), + "secretKey": zod.string().optional(), + "checkedServices": zod.string().optional(), + "subscriptionIds": zod.string().optional(), + "groupId": zod.number().optional(), + "tenantId": zod.string().optional(), + "isChinaAccount": zod.boolean().optional() +}) + +export const testAzureAccountResponse = zod.object({ + +}) + + +/** + * Test the connection or status of a SaaS account + * @summary Test SaaS account + */ +export const testSaaSAccountBody = zod.object({ + "privateKey": zod.string().optional(), + "accountId": zod.string().optional(), + "clientId": zod.string().optional(), + "secretKey": zod.string().optional(), + "statusType": zod.string().optional(), + "accountType": zod.string().optional(), + "tenantId": zod.string().optional(), + "serviceName": zod.string().optional(), + "userId": zod.string().optional(), + "statusUrls": zod.string().optional() +}) + +export const testSaaSAccountResponse = zod.object({ + +}) + + +/** + * Update the alert threshold for an instance group. Setting the threshold at the default group is not allowed. + * @summary Update instance group alert threshold + */ +export const updateInstanceGroupAlertThresholdParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number(), + "dsigId": zod.number(), + "dpId": zod.number() +}) + +export const updateInstanceGroupAlertThresholdBody = zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "alertEnable": zod.boolean().optional(), + "criticalAdAdvSetting": zod.string().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "alertExprNote": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)') +}) + +export const updateInstanceGroupAlertThresholdResponse = zod.object({ + +}) + + +/** + * The template field works only for the POST API + * @summary update dashboard group + */ +export const patchDashboardGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchDashboardGroupByIdBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group') +}) + +export const patchDashboardGroupByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "fullPath": zod.string().optional().describe('The full path of the dashboard group'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of groups directly under the Dashboard Group'), + "numOfDashboards": zod.number().optional().describe('The number of dashboards that belong to the Dashboard Group and any sub-groups'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "id": zod.number().optional().describe('The Id of the dashboard group '), + "dashboards": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "name": zod.string().optional().describe('The name of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "id": zod.number().optional().describe('The Id of the dashboard') +}).describe('The dashboards that belong to the group')).optional().describe('The dashboards that belong to the group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group'), + "numOfDirectDashboards": zod.number().optional().describe('The number of dashboards that belong directly to the Dashboard Group') +}) + + +/** + * Retrieves a dashboard group by its ID + * @summary Get dashboard group by ID + */ +export const getDashboardGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDashboardGroupByIdQueryParams = zod.object({ + "template": zod.boolean().optional(), + "format": zod.string().optional(), + "fields": zod.string().optional() +}) + +export const getDashboardGroupByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "fullPath": zod.string().optional().describe('The full path of the dashboard group'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of groups directly under the Dashboard Group'), + "numOfDashboards": zod.number().optional().describe('The number of dashboards that belong to the Dashboard Group and any sub-groups'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "id": zod.number().optional().describe('The Id of the dashboard group '), + "dashboards": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "name": zod.string().optional().describe('The name of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "id": zod.number().optional().describe('The Id of the dashboard') +}).describe('The dashboards that belong to the group')).optional().describe('The dashboards that belong to the group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group'), + "numOfDirectDashboards": zod.number().optional().describe('The number of dashboards that belong directly to the Dashboard Group') +}) + + +/** + * delete dashboard group + * @summary delete dashboard group + */ +export const deleteDashboardGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDashboardGroupByIdQueryParams = zod.object({ + "allowNonEmptyGroup": zod.boolean().optional() +}) + +export const deleteDashboardGroupByIdResponse = zod.object({ + +}) + + +/** + * The template field works only for the POST API + * @summary update dashboard group + */ +export const updateDashboardGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateDashboardGroupByIdBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group') +}) + +export const updateDashboardGroupByIdResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "fullPath": zod.string().optional().describe('The full path of the dashboard group'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of groups directly under the Dashboard Group'), + "numOfDashboards": zod.number().optional().describe('The number of dashboards that belong to the Dashboard Group and any sub-groups'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "id": zod.number().optional().describe('The Id of the dashboard group '), + "dashboards": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "name": zod.string().optional().describe('The name of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "id": zod.number().optional().describe('The Id of the dashboard') +}).describe('The dashboards that belong to the group')).optional().describe('The dashboards that belong to the group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group'), + "numOfDirectDashboards": zod.number().optional().describe('The number of dashboards that belong directly to the Dashboard Group') +}) + + +/** + * Retrieve the AWS account ID + * @summary Get AWS account ID + */ +export const getAwsAccountIdResponse = zod.object({ + "accountId": zod.string().optional() +}) + + +/** + * Import a AppliesTo function using json data + * @summary Import AppliesTo function via json + */ +export const importAppliesToFunctionJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importAppliesToFunctionJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importAppliesToFunctionJsonResponseIdMin = 0; + + + +export const importAppliesToFunctionJsonResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(importAppliesToFunctionJsonResponseIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +}) + + +/** + * add device group + * @summary add device group + */ +export const addDeviceGroupBody = zod.object({ + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "name": zod.string().describe('The name of the device group') +}) + +export const addDeviceGroupResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "numOfAWSDevices": zod.number().optional().describe('The number of AWS devices that belong to this device group (includes AWS devices in sub groups)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "gcpTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "numOfKubernetesDevices": zod.number().optional().describe('The number of kubernetes devices that belong to this device group (includes Kubernetes devices in sub groups)'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device group was created'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "hasNetflowEnabledDevices": zod.boolean().optional().describe('Whether if any Netflow enabled devices in this device group'), + "numOfAzureDevices": zod.number().optional().describe('The number of Azure devices that belong to this device group (includes Azure devices in sub groups)'), + "ociTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "propertyChangeWarningMessage": zod.string().optional().describe('Warning message if Parent Property of system.tenant.identifier is changed for a group'), + "defaultCollectorDescription": zod.string().optional().describe('The description of the default collector assigned to the device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "awsTestResult": zod.object({ + "warnings": zod.array(zod.enum(['CLIENT_ID_ISSUE', 'TENANT_ID_ISSUE', 'KEY_ISSUE', 'SUBSCRIPTION_ID_ISSUE', 'SERVICE_NAME_ERROR', 'TEMPORARY_WARNING', 'SERVICE_MEMBER_LIMIT_EXCEEDED', 'PROJECT_ID_ISSUE', 'CLIENT_EMAIL_ISSUE', 'TOKEN_URI_ISSUE', 'ROLE_ARN_ISSUE', 'PERMISSION_TEST_BYPASSED', 'POLICY_OR_NAME_ISSUE', 'SERVICE_PERMISION_FAILURE', 'MISSING_REQUIRED_CREDENTIAL_DATA', 'MISSING_CREDENTIALS', 'MISSING_SUBSCRIPTION_IDS', 'NO_SERVICES_CHECKED', 'MAXIMUM_RECORDS_EXCEEDED', 'FILTER_UNUSED', 'ID_NOT_FOUND', 'TYPE_INVALID', 'ID_INVALID', 'INVALID_TIME_RANGE', 'UNAUTHORIZED', 'OPTIONAL_FIELD_NOT_FOUND', 'EXTRA_FIELDS_PROVIDED', 'DEFAULT_COLUMNS_FILTER', 'SAAS_O365_EXTRA_PERMISSION', 'SAAS_O365_API_INACCESSIBLE', 'SAAS_O365_NO_PERMISSION_GRANTED', 'PATCH_NOT_ALLOWED_ON_READ_ONLY', 'PATCH_NOT_ALLOWED_ON_MULTI', 'IGNORED_COMPONENT_OF_PAYLOAD', 'INVALID_FIELD_VALUE', 'NO_ALERT_RULE_MATCHES_THIS_ALERT', 'INVALID_PROPERTY_NAMES_IGNORED', 'NO_STAGE_1_RECEIPIENTS_DEFINED_FOR_ALERT', 'NO_ESCALATING_CHAIN_MATCHES_THIS_ALERT', 'ASSUMED_TYPE', 'NO_DATA_FOR_MODEL', 'GET_INTEGRATION_FAIL', 'DASHBOARDS_NOT_CREATED', 'MISSING_PERMISSION_OR_MISSING_DATAPOINT', 'DISABLED_CLOUD_TYPE', 'SERVICE_API_DISABLED', 'ALERT_GENERATION_DISABLED', 'ALERT_GENERATION_DISABLED_WITH_NAME'])).optional(), + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The String result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "subGroups": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "description": zod.string().optional().describe('The description of the device group'), + "ociRegionsInfo": zod.string().optional(), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "name": zod.string().optional().describe('The name of the device group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}).describe('The child device groups within this device group')).optional().describe('The child device groups within this device group'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "azureTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "effectiveAlertEnabled": zod.boolean().optional().describe('Whether or not alerting is effectively disabled for this device group (alerting may be disabled at a higher level, e.g. parent group)'), + "defaultCollectorGroupDescription": zod.string().optional().describe('The description of the default collector group assigned to the device group'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "numOfOciDevices": zod.number().optional(), + "ociRegionsInfo": zod.string().optional(), + "saasTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the SaaS credentials associated with the SaaS group'), + "defaultCollectorGroupId": zod.number().optional().describe('The collector group id of the default collector assigned to the device group'), + "groupStatus": zod.string().optional().describe('normal | dead \nThe status of this device group, where possible statuses are normal and dead. A group with a status of dead may indicate that one or more devices are dead within the group'), + "numOfGcpDevices": zod.number().optional(), + "azureTestResult": zod.object({ + "noPermissionServices": zod.object({ + +}).optional(), + "detailLink": zod.object({ + +}).optional() +}).optional().describe('The String result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "awsTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "saasTestResult": zod.object({ + "nonPermissionApisErrors": zod.array(zod.string()).optional(), + "invalidStatusUrls": zod.string().optional(), + "noPermissionService": zod.string().optional(), + "resultCode": zod.number().optional(), + "detailLink": zod.string().optional(), + "noPermissionApis": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the SaaS credentials associated with the Saas group'), + "name": zod.string().describe('The name of the device group'), + "ociTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "gcpTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}) + + +/** + * get device group list + * @summary get device group list + */ +export const getDeviceGroupListQuerySizeDefault = 50;export const getDeviceGroupListQueryOffsetDefault = 0; + +export const getDeviceGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceGroupListQuerySizeDefault), + "offset": zod.number().default(getDeviceGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "numOfAWSDevices": zod.number().optional().describe('The number of AWS devices that belong to this device group (includes AWS devices in sub groups)'), + "description": zod.string().optional().describe('The description of the device group'), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "gcpTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "disableAlerting": zod.boolean().optional().describe('Indicates whether alerting is disabled (true) or enabled (false) for this device group'), + "numOfKubernetesDevices": zod.number().optional().describe('The number of kubernetes devices that belong to this device group (includes Kubernetes devices in sub groups)'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "createdOn": zod.number().optional().describe('The time, in epoch seconds format, that the device group was created'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "hasNetflowEnabledDevices": zod.boolean().optional().describe('Whether if any Netflow enabled devices in this device group'), + "numOfAzureDevices": zod.number().optional().describe('The number of Azure devices that belong to this device group (includes Azure devices in sub groups)'), + "ociTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "propertyChangeWarningMessage": zod.string().optional().describe('Warning message if Parent Property of system.tenant.identifier is changed for a group'), + "defaultCollectorDescription": zod.string().optional().describe('The description of the default collector assigned to the device group'), + "defaultCollectorId": zod.number().optional().describe('The Id of the default collector assigned to the device group'), + "awsTestResult": zod.object({ + "warnings": zod.array(zod.enum(['CLIENT_ID_ISSUE', 'TENANT_ID_ISSUE', 'KEY_ISSUE', 'SUBSCRIPTION_ID_ISSUE', 'SERVICE_NAME_ERROR', 'TEMPORARY_WARNING', 'SERVICE_MEMBER_LIMIT_EXCEEDED', 'PROJECT_ID_ISSUE', 'CLIENT_EMAIL_ISSUE', 'TOKEN_URI_ISSUE', 'ROLE_ARN_ISSUE', 'PERMISSION_TEST_BYPASSED', 'POLICY_OR_NAME_ISSUE', 'SERVICE_PERMISION_FAILURE', 'MISSING_REQUIRED_CREDENTIAL_DATA', 'MISSING_CREDENTIALS', 'MISSING_SUBSCRIPTION_IDS', 'NO_SERVICES_CHECKED', 'MAXIMUM_RECORDS_EXCEEDED', 'FILTER_UNUSED', 'ID_NOT_FOUND', 'TYPE_INVALID', 'ID_INVALID', 'INVALID_TIME_RANGE', 'UNAUTHORIZED', 'OPTIONAL_FIELD_NOT_FOUND', 'EXTRA_FIELDS_PROVIDED', 'DEFAULT_COLUMNS_FILTER', 'SAAS_O365_EXTRA_PERMISSION', 'SAAS_O365_API_INACCESSIBLE', 'SAAS_O365_NO_PERMISSION_GRANTED', 'PATCH_NOT_ALLOWED_ON_READ_ONLY', 'PATCH_NOT_ALLOWED_ON_MULTI', 'IGNORED_COMPONENT_OF_PAYLOAD', 'INVALID_FIELD_VALUE', 'NO_ALERT_RULE_MATCHES_THIS_ALERT', 'INVALID_PROPERTY_NAMES_IGNORED', 'NO_STAGE_1_RECEIPIENTS_DEFINED_FOR_ALERT', 'NO_ESCALATING_CHAIN_MATCHES_THIS_ALERT', 'ASSUMED_TYPE', 'NO_DATA_FOR_MODEL', 'GET_INTEGRATION_FAIL', 'DASHBOARDS_NOT_CREATED', 'MISSING_PERMISSION_OR_MISSING_DATAPOINT', 'DISABLED_CLOUD_TYPE', 'SERVICE_API_DISABLED', 'ALERT_GENERATION_DISABLED', 'ALERT_GENERATION_DISABLED_WITH_NAME'])).optional(), + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The String result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "extra": zod.object({ + +}).optional().describe('The extra setting for cloud group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "subGroups": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the device group (i.e. if the group \'Dev\' is under a parent group named \'Production\', the fullPath would be \'Production/Dev\''), + "groupType": zod.string().optional().describe('The type of device group: normal and dynamic device groups will have groupType=Normal, and AWS groups will have a groupType value of AWS/SERVICE (e.g. AWS/S3)'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "description": zod.string().optional().describe('The description of the device group'), + "ociRegionsInfo": zod.string().optional(), + "appliesTo": zod.string().optional().describe('The Applies to custom query for this group (only for dynamic groups)'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operations for the device group that are granted to the user that made this API request')).optional().describe('The role privilege operations for the device group that are granted to the user that made this API request'), + "awsRegionsInfo": zod.string().optional().describe('The number of instances in each AWS region (only applies to AWS groups)'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "name": zod.string().optional().describe('The name of the device group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of sub-groups that belong only to this device group (doesn\'t include groups under sub-groups)'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +}).describe('The child device groups within this device group')).optional().describe('The child device groups within this device group'), + "numOfDirectDevices": zod.number().optional().describe('The number of AWS and normal devices that belong only to this device group (doesn\'t include devices in sub-groups)'), + "id": zod.number().optional().describe('The id of the device group'), + "enableNetflow": zod.boolean().optional().describe('Indicates whether Netflow is enabled (true) or disabled (false) for the device group, the default value is true'), + "azureTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "effectiveAlertEnabled": zod.boolean().optional().describe('Whether or not alerting is effectively disabled for this device group (alerting may be disabled at a higher level, e.g. parent group)'), + "defaultCollectorGroupDescription": zod.string().optional().describe('The description of the default collector group assigned to the device group'), + "userPermission": zod.string().optional().describe('The permissions for the device group that are granted to the user that made this API request'), + "gcpRegionsInfo": zod.string().optional(), + "numOfOciDevices": zod.number().optional(), + "ociRegionsInfo": zod.string().optional(), + "saasTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the SaaS credentials associated with the SaaS group'), + "defaultCollectorGroupId": zod.number().optional().describe('The collector group id of the default collector assigned to the device group'), + "groupStatus": zod.string().optional().describe('normal | dead \nThe status of this device group, where possible statuses are normal and dead. A group with a status of dead may indicate that one or more devices are dead within the group'), + "numOfGcpDevices": zod.number().optional(), + "azureTestResult": zod.object({ + "noPermissionServices": zod.object({ + +}).optional(), + "detailLink": zod.object({ + +}).optional() +}).optional().describe('The String result returned by the transaction that tests the Azure credentials associated with the Azure group'), + "parentId": zod.number().optional().describe('The id of the parent group for this device group (the root device group has an Id of 1)'), + "awsTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the AWS credentials associated with the AWS group'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with this device group'), + "numOfHosts": zod.number().optional().describe('The number of total devices, including both AWS and normal devices, that belong to this device group (includes normal devices in sub groups)'), + "defaultAutoBalancedCollectorGroupId": zod.number().optional().describe('The id of the default Auto Balanced Collector Group assigned to the device group'), + "saasTestResult": zod.object({ + "nonPermissionApisErrors": zod.array(zod.string()).optional(), + "invalidStatusUrls": zod.string().optional(), + "noPermissionService": zod.string().optional(), + "resultCode": zod.number().optional(), + "detailLink": zod.string().optional(), + "noPermissionApis": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the SaaS credentials associated with the Saas group'), + "name": zod.string().describe('The name of the device group'), + "ociTestResultCode": zod.number().optional().describe('The Status code result returned by the transaction that tests the OCI credentials associated with the OCI group'), + "gcpTestResult": zod.object({ + "noPermissionServices": zod.array(zod.string()).optional(), + "detailLink": zod.string().optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}).optional().describe('The result returned by the transaction that tests the GCP credentials associated with the GCP group'), + "azureRegionsInfo": zod.string().optional().describe('The number of instances in each Azure region (only applies to Azure groups)') +})).optional() +}) + + +/** + * Test the connection or status of an AWS account + * @summary Test AWS account + */ +export const testAWSAccountBody = zod.object({ + "accessId": zod.string().optional(), + "isBillingAcceptOptInWarnings": zod.boolean().optional(), + "accountId": zod.string().optional(), + "newBillingBucket": zod.string().optional(), + "assumedRoleArn": zod.string().optional(), + "bucketNameForBillingFiles": zod.string().optional(), + "accessKey": zod.string().optional(), + "checkedServices": zod.string().optional(), + "groupId": zod.number().optional(), + "newBillingPath": zod.string().optional(), + "externalId": zod.string().optional() +}) + +export const testAWSAccountResponse = zod.object({ + +}) + + +/** + * Create a new applies to function + * @summary Add applies to function + */ +export const addAppliesToFunctionBody = zod.object({ + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const addAppliesToFunctionResponseIdMin = 0; + + + +export const addAppliesToFunctionResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(addAppliesToFunctionResponseIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +}) + + +/** + * Retrieve a paginated list of functions that apply + * @summary Get applies to function list + */ +export const getAppliesToFunctionListQuerySizeDefault = 50;export const getAppliesToFunctionListQueryOffsetDefault = 0; + +export const getAppliesToFunctionListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAppliesToFunctionListQuerySizeDefault), + "offset": zod.number().default(getAppliesToFunctionListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAppliesToFunctionListResponseItemsItemIdMin = 0; + + + +export const getAppliesToFunctionListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "code": zod.string().describe('The AppliesTo Function code. Note that special characters may need to be escaped.'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The name of the AppliesTo Function'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "description": zod.string().optional().describe('The description of the AppliesTo Function'), + "id": zod.number().min(getAppliesToFunctionListResponseItemsItemIdMin).optional().describe('The ID of the AppliesTo Function'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage Id of the LMModule') +})).optional() +}) + + +/** + * Create a new collector group + * @summary Add collector group + */ +export const addCollectorGroupBody = zod.object({ + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy') +}) + +export const addCollectorGroupResponse = zod.object({ + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request'), + "numOfCollectors": zod.number().optional().describe('The number of collectors that belong to the group'), + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "highestPriorityCollectorStatus": zod.object({ + "inSDT": zod.boolean().optional().describe('The SDT status of the highest priority sub collector'), + "acked": zod.boolean().optional().describe('The acked status of the highest priority sub collector'), + "isDown": zod.boolean().optional().describe('The down status of the highest priority sub collector'), + "status": zod.number().optional().describe('The status of the highest priority sub collector') +}).optional().describe('The status of the highest priority sub collector'), + "platform": zod.string().optional().describe('The platform limitation'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "numOfHosts": zod.number().optional().describe('The number of hosts that belong to the group'), + "numOfInstances": zod.number().optional().describe('The number of instances that belong to the group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy'), + "createOn": zod.number().optional().describe('The time at which the group was created in epoch format'), + "id": zod.number().optional().describe('The id of the Collector Group'), + "mismatchVersion": zod.boolean().optional().describe('Specifies if the version of all collectors in group is same') +}) + + +/** + * Retrieve a paginated list of collector groups + * @summary Get collector group list + */ +export const getCollectorGroupListQuerySizeDefault = 50;export const getCollectorGroupListQueryOffsetDefault = 0; + +export const getCollectorGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getCollectorGroupListQuerySizeDefault), + "offset": zod.number().default(getCollectorGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getCollectorGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request'), + "numOfCollectors": zod.number().optional().describe('The number of collectors that belong to the group'), + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "highestPriorityCollectorStatus": zod.object({ + "inSDT": zod.boolean().optional().describe('The SDT status of the highest priority sub collector'), + "acked": zod.boolean().optional().describe('The acked status of the highest priority sub collector'), + "isDown": zod.boolean().optional().describe('The down status of the highest priority sub collector'), + "status": zod.number().optional().describe('The status of the highest priority sub collector') +}).optional().describe('The status of the highest priority sub collector'), + "platform": zod.string().optional().describe('The platform limitation'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "numOfHosts": zod.number().optional().describe('The number of hosts that belong to the group'), + "numOfInstances": zod.number().optional().describe('The number of instances that belong to the group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy'), + "createOn": zod.number().optional().describe('The time at which the group was created in epoch format'), + "id": zod.number().optional().describe('The id of the Collector Group'), + "mismatchVersion": zod.boolean().optional().describe('Specifies if the version of all collectors in group is same') +})).optional() +}) + + +/** + * Adds a new diagnostics source + * @summary Add diagnostics source + */ +export const addDiagnosticSourceBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const addDiagnosticSourceResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "dataType": zod.number().optional().describe('The data type of diagnostics source, default is 0. The values can be\n\n0: diagnostics source\n\n1: raw ERI\n\n '), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "source": zod.string().optional().describe('The diagnostics source'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The diagnostics source name'), + "inUse": zod.string().optional().describe('The diagnostics source is in use'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "installationStatuses": zod.array(zod.enum(['NEW', 'UPGRADED', 'AUDITED', 'OUTDATED', 'INSTALLED', 'CUSTOMIZED', 'CONFLICT', 'PARTIALLY_INSTALLED', 'IS_INSTALLED', 'IS_CUSTOMIZED', 'CAN_INSTALL', 'CAN_UPGRADE', 'CAN_SKIP', 'CAN_DOWNGRADE']).describe('The diagnostics Installation status')).optional().describe('The diagnostics Installation status'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Retrieves a list of diagnostics sources + * @summary Get diagnostics sources list + */ +export const getDiagnosticSourcesListResponse = zod.object({ + "items": zod.array(zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +})).optional() +}) + + +/** + * Retrieve graph data for the overview of a device instance group + * @summary Get device instance group overview graph data + */ +export const getDeviceDatasourceInstanceGroupOverviewGraphDataParams = zod.object({ + "deviceDsId": zod.number().describe('The device-datasource ID you\'d like to add an instance group for'), + "deviceId": zod.number(), + "dsigId": zod.number(), + "ographId": zod.number() +}) + +export const getDeviceDatasourceInstanceGroupOverviewGraphDataQueryParams = zod.object({ + "start": zod.number().optional(), + "end": zod.number().optional(), + "format": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceGroupOverviewGraphDataResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * get alerts for a website + * @summary get alerts for a website + */ +export const getWebsiteAlertListByWebsiteIdParams = zod.object({ + "id": zod.number() +}) + +export const getWebsiteAlertListByWebsiteIdQuerySizeDefault = 50;export const getWebsiteAlertListByWebsiteIdQueryOffsetDefault = 0; + +export const getWebsiteAlertListByWebsiteIdQueryParams = zod.object({ + "needMessage": zod.boolean().optional(), + "customColumns": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getWebsiteAlertListByWebsiteIdQuerySizeDefault), + "offset": zod.number().default(getWebsiteAlertListByWebsiteIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWebsiteAlertListByWebsiteIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.object({ + "activeOnly": zod.boolean().optional(), + "anomaly": zod.string().optional(), + "pivotType": zod.string().optional(), + "suppressorFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "forServices": zod.boolean().optional(), + "refreshActiveAlertCache": zod.boolean().optional(), + "pivotDimensions": zod.array(zod.string()).optional(), + "dependencyRoutingStateFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "excludePhatomFlag": zod.boolean().optional(), + "dependencyRoleFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "pivotDimensionESField": zod.array(zod.string()).optional(), + "lmconfigEnabled": zod.boolean().optional(), + "dependencyRoutingStateFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "dependencyRoleFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "clearedOnly": zod.boolean().optional(), + "suppressorFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "alertsById": zod.object({ + "resourceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "eventSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "clusterAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "datapoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "escalationChains": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "sdts": zod.record(zod.string(), zod.object({ + "notes": zod.string().optional().describe('Notes regarding the SDT'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "dataSourceId": zod.number().optional().describe('The id of the datasource instance that the SDT will be associated with'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "endedAtMS": zod.number().optional().describe('The time milliseconds that the SDT will end or has ended.'), + "resourceGroupId": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT'), + "identifier": zod.object({ + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional() +}).optional(), + "targetId": zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).optional().describe('SDT target'), + "deviceDataSourceId": zod.number().optional().describe('The id of the device datasource instance group that the SDT will be associated with'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "intoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "websiteGroupId": zod.number().describe('The Id of the service group that the SDT applies to'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "recurrence": zod.string().describe('Describes how and when the SDT recures'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "relatedIntoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "createdBy": zod.string().optional().describe('SDT creator\'s username'), + "startedAtMS": zod.number().optional().describe('The time in milliseconds that the SDT will start or has started') +})).optional(), + "alertRules": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "resources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logpipelinesources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "services": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstances": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "alerts": zod.record(zod.string(), zod.unknown()).optional(), + "logalerts": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "batchJobs": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstanceAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceCheckpoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logAlertsMap": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional() +}).optional() +}).optional(), + "id": zod.string().optional().describe('The alert id'), + "detailMessage": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +})).optional() +}) + + +/** + * Retrieve data for a specific device datasource by its ID + * @summary Get device datasource data + */ +export const getDeviceDatasourceDataByIdParams = zod.object({ + "deviceId": zod.number(), + "id": zod.number() +}) + +export const getDeviceDatasourceDataByIdQueryParams = zod.object({ + "period": zod.number().optional(), + "start": zod.number().optional(), + "end": zod.number().optional(), + "datapoints": zod.string().optional(), + "format": zod.string().optional(), + "aggregate": zod.string().optional().describe('The aggregate option') +}) + +export const getDeviceDatasourceDataByIdResponse = zod.object({ + "instances": zod.record(zod.string(), zod.object({ + "values": zod.array(zod.array(zod.number().describe('Datapoint values 2-D list')).describe('Datapoint values 2-D list')).optional().describe('Datapoint values 2-D list'), + "time": zod.array(zod.number().describe('Timestamp list')).optional().describe('Timestamp list'), + "nextPageParams": zod.string().optional().describe('The next page parameters') +})).optional(), + "dataPoints": zod.array(zod.string()).optional(), + "nextPageParams": zod.string().optional(), + "dataSourceName": zod.string().optional() +}) + + +/** + * Update a specific property of a device + * @summary Update device property + */ +export const patchDevicePropertyByNameParams = zod.object({ + "deviceId": zod.number(), + "name": zod.string() +}) + +export const patchDevicePropertyByNameBody = zod.object({ + +}) + +export const patchDevicePropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Retrieve a specific device property by its name + * @summary Get device property by name + */ +export const getDevicePropertyByNameParams = zod.object({ + "deviceId": zod.number(), + "name": zod.string() +}) + +export const getDevicePropertyByNameQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDevicePropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Delete a specific property of a device by its name + * @summary Delete device property + */ +export const deleteDevicePropertyByNameParams = zod.object({ + "deviceId": zod.number(), + "name": zod.string() +}) + +export const deleteDevicePropertyByNameResponse = zod.object({ + +}) + + +/** + * Update a specific property of a device + * @summary Update device property + */ +export const updateDevicePropertyByNameParams = zod.object({ + "deviceId": zod.number(), + "name": zod.string() +}) + +export const updateDevicePropertyByNameBody = zod.object({ + +}) + +export const updateDevicePropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * update user + * @summary update user + */ +export const patchAdminByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchAdminByIdQueryParams = zod.object({ + "changePassword": zod.boolean().optional(), + "validationOnly": zod.boolean().optional() +}) + +export const patchAdminByIdBody = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + +export const patchAdminByIdResponse = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "lastLoginOn": zod.number().optional().describe('The time that the user last logged in, in epoch format'), + "lastActionOnLocal": zod.string().optional().describe('The time, in local format, of the user\'s last action'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "lastAuthIp": zod.string().optional().describe('The Last User IP'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "lastAction": zod.string().optional().describe('The last action taken by the user'), + "trainingEmail": zod.string().optional().describe('The email address for user\'s Training account'), + "lastActionOn": zod.number().optional().describe('The time, in epoch format, of the user\'s last action'), + "lastAccessOn": zod.number().optional().describe('The time that the user last accessed the portal'), + "id": zod.number().optional().describe('The Id of the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "acceptEULAOn": zod.number().optional().describe('The time, in epoch format, that the user accepted the EULA (if required to)'), + "immediateForceLogout": zod.boolean().optional().describe('Specifies whether the user need to be logged off, if Force Password Change is enabled. The values can be true|false'), + "userPermission": zod.string().optional().describe('The permission of current user with the admin. values can be write|read|none'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "tenantId": zod.number().optional().describe('The tenant id of the user'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "userType": zod.string().optional().describe('The type of user'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + + +/** + * get user + * @summary get user + */ +export const getAdminByIdParams = zod.object({ + "id": zod.number() +}) + +export const getAdminByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getAdminByIdResponse = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "lastLoginOn": zod.number().optional().describe('The time that the user last logged in, in epoch format'), + "lastActionOnLocal": zod.string().optional().describe('The time, in local format, of the user\'s last action'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "lastAuthIp": zod.string().optional().describe('The Last User IP'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "lastAction": zod.string().optional().describe('The last action taken by the user'), + "trainingEmail": zod.string().optional().describe('The email address for user\'s Training account'), + "lastActionOn": zod.number().optional().describe('The time, in epoch format, of the user\'s last action'), + "lastAccessOn": zod.number().optional().describe('The time that the user last accessed the portal'), + "id": zod.number().optional().describe('The Id of the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "acceptEULAOn": zod.number().optional().describe('The time, in epoch format, that the user accepted the EULA (if required to)'), + "immediateForceLogout": zod.boolean().optional().describe('Specifies whether the user need to be logged off, if Force Password Change is enabled. The values can be true|false'), + "userPermission": zod.string().optional().describe('The permission of current user with the admin. values can be write|read|none'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "tenantId": zod.number().optional().describe('The tenant id of the user'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "userType": zod.string().optional().describe('The type of user'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + + +/** + * delete user + * @summary delete user + */ +export const deleteAdminByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteAdminByIdResponse = zod.object({ + +}) + + +/** + * update user + * @summary update user + */ +export const updateAdminByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateAdminByIdQueryParams = zod.object({ + "changePassword": zod.boolean().optional(), + "validationOnly": zod.boolean().optional() +}) + +export const updateAdminByIdBody = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + +export const updateAdminByIdResponse = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "lastLoginOn": zod.number().optional().describe('The time that the user last logged in, in epoch format'), + "lastActionOnLocal": zod.string().optional().describe('The time, in local format, of the user\'s last action'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "lastAuthIp": zod.string().optional().describe('The Last User IP'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "lastAction": zod.string().optional().describe('The last action taken by the user'), + "trainingEmail": zod.string().optional().describe('The email address for user\'s Training account'), + "lastActionOn": zod.number().optional().describe('The time, in epoch format, of the user\'s last action'), + "lastAccessOn": zod.number().optional().describe('The time that the user last accessed the portal'), + "id": zod.number().optional().describe('The Id of the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "acceptEULAOn": zod.number().optional().describe('The time, in epoch format, that the user accepted the EULA (if required to)'), + "immediateForceLogout": zod.boolean().optional().describe('Specifies whether the user need to be logged off, if Force Password Change is enabled. The values can be true|false'), + "userPermission": zod.string().optional().describe('The permission of current user with the admin. values can be write|read|none'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "tenantId": zod.number().optional().describe('The tenant id of the user'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "userType": zod.string().optional().describe('The type of user'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + + +/** + * Retrieve the list of update reasons/history for a specific configSource + * @summary Get update history for a configSource + */ +export const getUpdateReasonListByConfigSourceIdParams = zod.object({ + "id": zod.number() +}) + +export const getUpdateReasonListByConfigSourceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "timeEpoch": zod.number().optional().describe('Update date epoch'), + "clientIp": zod.string().optional().describe('Client IP from which this update has been made'), + "updateReason": zod.string().optional().describe('Update reason'), + "timeStr": zod.string().optional().describe('Update date in form \'YYYY-MM-DD HH:MM:SS\''), + "id": zod.number().optional().describe('ID of update reason'), + "userName": zod.string().optional().describe('User who made this update') +})).optional() +}) + + +/** + * Create a new JobMonitor + * @summary Add JobMonitor + */ +export const addJobMonitorBody = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const addJobMonitorResponse = zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Retrieve a paginated list of Job Monitors + * @summary Get JobMonitor List + */ +export const getJobMonitorListQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getJobMonitorListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "activeMonitoring": zod.boolean().optional().describe('Whether to enable active monitoring of job start'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "alertLevel": zod.enum(['warn', 'error', 'critical']).describe('alert level if job doesn\'t start on time, effective if activeMonitoring true'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "cronSchedule": zod.string().describe('Cron schedule expression, only the latter 5 ,effective if activeMonitoring true'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "cronTimeZone": zod.string().describe('Cron timezone, effective if activeMonitoring true'), + "alertBody": zod.string().describe('Alert message body'), + "startMrtie": zod.number().optional().describe('Max Relative Time Interval Error, effective if activeMonitoring true'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('JobMonitor name'), + "alertSubject": zod.string().describe('Alert message subject'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "longestRunTimeInMinute": zod.number().optional().describe('Max job run time in minutes'), + "alertEffectiveIval": zod.number().describe('JobMonitor alert effective interval in minutes'), + "group": zod.string().optional().describe('The group the LMModule is in') +})).optional() +}) + + +/** + * Imports an event source from an XML file + * @summary Import event source via XML + */ +export const importEventSourceBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}) +}) + +export const importEventSourceResponse = zod.object({ + +}) + + +/** + * Retrieves the graph data for a website + * @summary Get website graph data + */ +export const getWebsiteGraphDataParams = zod.object({ + "checkpointId": zod.number(), + "websiteId": zod.number(), + "graphName": zod.string() +}) + +export const getWebsiteGraphDataQueryParams = zod.object({ + "end": zod.number().optional(), + "start": zod.number().optional(), + "format": zod.string().optional() +}) + +export const getWebsiteGraphDataResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * get SDT history for the group + * @summary get SDT history for the group + */ +export const getSDTHistoryByDeviceGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getSDTHistoryByDeviceGroupIdQuerySizeDefault = 50;export const getSDTHistoryByDeviceGroupIdQueryOffsetDefault = 0; + +export const getSDTHistoryByDeviceGroupIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getSDTHistoryByDeviceGroupIdQuerySizeDefault), + "offset": zod.number().default(getSDTHistoryByDeviceGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTHistoryByDeviceGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * Update the API tokens for a specific user + * @summary Update API tokens for a user + */ +export const patchApiTokenByAdminIdParams = zod.object({ + "adminId": zod.number(), + "apitokenId": zod.number() +}) + +export const patchApiTokenByAdminIdBody = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + +export const patchApiTokenByAdminIdResponse = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + + +/** + * Delete a specific API token by its ID + * @summary Delete API token + */ +export const deleteApiTokenByIdParams = zod.object({ + "adminId": zod.number(), + "apitokenId": zod.number() +}) + +export const deleteApiTokenByIdResponse = zod.object({ + +}) + + +/** + * Update the API tokens for a specific user + * @summary Update API tokens for a user + */ +export const updateApiTokenByAdminIdParams = zod.object({ + "adminId": zod.number(), + "apitokenId": zod.number() +}) + +export const updateApiTokenByAdminIdBody = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + +export const updateApiTokenByAdminIdResponse = zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user') + + +/** + * Add a note to the alert with the given ID + * @summary Add alert note + */ +export const addAlertNoteByIdParams = zod.object({ + "id": zod.string() +}) + +export const addAlertNoteByIdBody = zod.object({ + "ackComment": zod.string().describe('your comment on the alert') +}) + +export const addAlertNoteByIdResponse = zod.object({ + +}) + + +/** + * add dashboard + * @summary add dashboard + */ +export const addDashboardBody = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard') +}) + +export const addDashboardResponse = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "fullName": zod.string().optional().describe('Full name of the dashboard, including group path'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard'), + "overwriteGroupFields": zod.boolean().optional().describe('Overwrite existing Resource/Website Group fields with ##defaultResourceGroup## and/or ##defaultWebsiteGroup## tokens. This value of this attribute is only considered while updating the Dashboard configuration. While creating the new Dashboard, this value will always be considered as false irrespective of the passed value.'), + "id": zod.number().optional().describe('The Id of the dashboard'), + "groupFullPath": zod.string().optional().describe('The full path (excluding root group) of the group the dashboard belongs to') +}) + + +/** + * Retrieves a list of dashboards + * @summary Get dashboard list + */ +export const getDashboardListQuerySizeDefault = 50;export const getDashboardListQueryOffsetDefault = 0; + +export const getDashboardListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDashboardListQuerySizeDefault), + "offset": zod.number().default(getDashboardListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDashboardListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "fullName": zod.string().optional().describe('Full name of the dashboard, including group path'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard'), + "overwriteGroupFields": zod.boolean().optional().describe('Overwrite existing Resource/Website Group fields with ##defaultResourceGroup## and/or ##defaultWebsiteGroup## tokens. This value of this attribute is only considered while updating the Dashboard configuration. While creating the new Dashboard, this value will always be considered as false irrespective of the passed value.'), + "id": zod.number().optional().describe('The Id of the dashboard'), + "groupFullPath": zod.string().optional().describe('The full path (excluding root group) of the group the dashboard belongs to') +})).optional() +}) + + +/** + * Retrieve a paginated list of API tokens for all users + * @summary Get a list of API tokens across users + */ +export const getApiTokenListQuerySizeDefault = 50;export const getApiTokenListQueryOffsetDefault = 0; + +export const getApiTokenListQueryParams = zod.object({ + "type": zod.string().optional(), + "permission": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getApiTokenListQuerySizeDefault), + "offset": zod.number().default(getApiTokenListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getApiTokenListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional() +}) + + +/** + * Update the details of a specific escalation chain by its ID + * @summary Update escalation chain + */ +export const patchEscalationChainByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchEscalationChainByIdBody = zod.object({ + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + +export const patchEscalationChainByIdResponse = zod.object({ + "inAlerting": zod.boolean().optional().describe('Whether or not chain in alerting'), + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "id": zod.number().optional().describe('The Id of the chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + + +/** + * Retrieve details of a specific escalation chain by its ID + * @summary Get escalation chain by ID + */ +export const getEscalationChainByIdParams = zod.object({ + "id": zod.number() +}) + +export const getEscalationChainByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getEscalationChainByIdResponse = zod.object({ + "inAlerting": zod.boolean().optional().describe('Whether or not chain in alerting'), + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "id": zod.number().optional().describe('The Id of the chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + + +/** + * Delete a specific escalation chain by its ID + * @summary Delete escalation chain + */ +export const deleteEscalationChainByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteEscalationChainByIdResponse = zod.object({ + +}) + + +/** + * Update the details of a specific escalation chain by its ID + * @summary Update escalation chain + */ +export const updateEscalationChainByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateEscalationChainByIdBody = zod.object({ + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + +export const updateEscalationChainByIdResponse = zod.object({ + "inAlerting": zod.boolean().optional().describe('Whether or not chain in alerting'), + "throttlingAlerts": zod.number().optional().describe('Maximum number of alerts can be sent during a throttle period'), + "enableThrottling": zod.boolean().optional().describe('If throttle needs to be enabled then true if not then false.'), + "destinations": zod.array(zod.object({ + "period": zod.object({ + "weekDays": zod.array(zod.number().describe('The list of week day of this period')).describe('The list of week day of this period'), + "timezone": zod.string().describe('The timezone for this period'), + "startMinutes": zod.number().describe('The start minute of this period'), + "endMinutes": zod.number().describe('The end minute of this period') +}).optional().describe('If type is timebased then effective time when recipient receive notification.\n'), + "stages": zod.array(zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).describe('List of recipients list')).describe('List of recipients list'), + "type": zod.string().describe('Type of stages in this chain. The values can be timebased|simple') +}).describe('The chain destinations')).describe('The chain destinations'), + "name": zod.string().describe('The chain name'), + "description": zod.string().optional().describe('The description for chain'), + "id": zod.number().optional().describe('The Id of the chain'), + "ccDestinations": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The chain\'s cc destinations'), + "throttlingPeriod": zod.number().optional().describe('The throttle period') +}) + + +/** + * Update the config source details based on the provided ID + * @summary Update config source by ID + */ +export const patchConfigSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchConfigSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchConfigSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + +export const patchConfigSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Retrieve a config source by its ID + * @summary Get config source by ID + */ +export const getConfigSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const getConfigSourceByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getConfigSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Delete a config source based on the provided ID + * @summary Delete config source by ID + */ +export const deleteConfigSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteConfigSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Update the config source details based on the provided ID + * @summary Update config source by ID + */ +export const updateConfigSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateConfigSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateConfigSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + +export const updateConfigSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Update the alert setting for a specific device group datasource + * @summary Update device group datasource alert setting + */ +export const patchDeviceGroupDatasourceAlertSettingParams = zod.object({ + "deviceGroupId": zod.number(), + "dsId": zod.number() +}) + +export const patchDeviceGroupDatasourceAlertSettingBody = zod.object({ + "datasourceType": zod.string().optional(), + "dpConfig": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional(), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "disableAlerting": zod.boolean().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "globalCriticalAdAdvSetting": zod.string().optional(), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional(), + "globalEnableAnomalyAlertGeneration": zod.string().optional(), + "globalErrorAdAdvSetting": zod.string().optional(), + "enableAnomalyAlertGeneration": zod.string().optional(), + "dataPointName": zod.string(), + "dataPointId": zod.number(), + "globalEnableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional(), + "globalWarnAdAdvSetting": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "parentDeviceGroupAlertExprList": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "globalAdAdvSettingEnabled": zod.boolean().optional(), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string() +})).optional() +}) + +export const patchDeviceGroupDatasourceAlertSettingResponse = zod.object({ + "datasourceType": zod.string().optional(), + "dpConfig": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional(), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "disableAlerting": zod.boolean().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "globalCriticalAdAdvSetting": zod.string().optional(), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional(), + "globalEnableAnomalyAlertGeneration": zod.string().optional(), + "globalErrorAdAdvSetting": zod.string().optional(), + "enableAnomalyAlertGeneration": zod.string().optional(), + "dataPointName": zod.string(), + "dataPointId": zod.number(), + "globalEnableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional(), + "globalWarnAdAdvSetting": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "parentDeviceGroupAlertExprList": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "globalAdAdvSettingEnabled": zod.boolean().optional(), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string() +})).optional() +}) + + +/** + * Retrieve the alert setting for a specific device group datasource + * @summary Get device group datasource alert setting + */ +export const getDeviceGroupDatasourceAlertSettingParams = zod.object({ + "deviceGroupId": zod.number(), + "dsId": zod.number() +}) + +export const getDeviceGroupDatasourceAlertSettingQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceGroupDatasourceAlertSettingResponse = zod.object({ + "datasourceType": zod.string().optional(), + "dpConfig": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional(), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "disableAlerting": zod.boolean().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "globalCriticalAdAdvSetting": zod.string().optional(), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional(), + "globalEnableAnomalyAlertGeneration": zod.string().optional(), + "globalErrorAdAdvSetting": zod.string().optional(), + "enableAnomalyAlertGeneration": zod.string().optional(), + "dataPointName": zod.string(), + "dataPointId": zod.number(), + "globalEnableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional(), + "globalWarnAdAdvSetting": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "parentDeviceGroupAlertExprList": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "globalAdAdvSettingEnabled": zod.boolean().optional(), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string() +})).optional() +}) + + +/** + * Update the alert setting for a specific device group datasource + * @summary Update device group datasource alert setting + */ +export const updateDeviceGroupDatasourceAlertSettingParams = zod.object({ + "deviceGroupId": zod.number(), + "dsId": zod.number() +}) + +export const updateDeviceGroupDatasourceAlertSettingBody = zod.object({ + "datasourceType": zod.string().optional(), + "dpConfig": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional(), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "disableAlerting": zod.boolean().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "globalCriticalAdAdvSetting": zod.string().optional(), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional(), + "globalEnableAnomalyAlertGeneration": zod.string().optional(), + "globalErrorAdAdvSetting": zod.string().optional(), + "enableAnomalyAlertGeneration": zod.string().optional(), + "dataPointName": zod.string(), + "dataPointId": zod.number(), + "globalEnableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional(), + "globalWarnAdAdvSetting": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "parentDeviceGroupAlertExprList": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "globalAdAdvSettingEnabled": zod.boolean().optional(), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string() +})).optional() +}) + +export const updateDeviceGroupDatasourceAlertSettingResponse = zod.object({ + "datasourceType": zod.string().optional(), + "dpConfig": zod.array(zod.object({ + "globalAlertExpr": zod.string().optional(), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "disableAlerting": zod.boolean().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared (0-60)'), + "globalCriticalAdAdvSetting": zod.string().optional(), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional(), + "globalEnableAnomalyAlertGeneration": zod.string().optional(), + "globalErrorAdAdvSetting": zod.string().optional(), + "enableAnomalyAlertGeneration": zod.string().optional(), + "dataPointName": zod.string(), + "dataPointId": zod.number(), + "globalEnableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered (0-60)'), + "enableAnomalyAlertSuppression": zod.string().optional(), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional(), + "globalWarnAdAdvSetting": zod.string().optional(), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "parentDeviceGroupAlertExprList": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "globalAdAdvSettingEnabled": zod.boolean().optional(), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string() +})).optional() +}) + + +/** + * update alert rule + * @summary update alert rule + */ +export const patchAlertRuleByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchAlertRuleByIdBody = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + +export const patchAlertRuleByIdResponse = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "id": zod.number().optional().describe('The Id of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalatingChain": zod.object({ + +}).optional().describe('The escalation chain associated with the alert rule'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + + +/** + * get alert rule by id + * @summary get alert rule by id + */ +export const getAlertRuleByIdParams = zod.object({ + "id": zod.number() +}) + +export const getAlertRuleByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getAlertRuleByIdResponse = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "id": zod.number().optional().describe('The Id of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalatingChain": zod.object({ + +}).optional().describe('The escalation chain associated with the alert rule'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + + +/** + * delete alert rule + * @summary delete alert rule + */ +export const deleteAlertRuleByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteAlertRuleByIdResponse = zod.object({ + +}) + + +/** + * update alert rule + * @summary update alert rule + */ +export const updateAlertRuleByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateAlertRuleByIdBody = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + +export const updateAlertRuleByIdResponse = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "id": zod.number().optional().describe('The Id of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalatingChain": zod.object({ + +}).optional().describe('The escalation chain associated with the alert rule'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + + +/** + * get device instance data + * @summary get device instance data + */ +export const getDeviceInstanceGraphDataOnlyByInstanceIdParams = zod.object({ + "instanceId": zod.number(), + "graphId": zod.number() +}) + +export const getDeviceInstanceGraphDataOnlyByInstanceIdQueryParams = zod.object({ + "start": zod.number().optional(), + "end": zod.number().optional(), + "format": zod.string().optional() +}) + +export const getDeviceInstanceGraphDataOnlyByInstanceIdResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * Get access group list + * @summary Get access group list + */ +export const getAccessGroupListQuerySizeDefault = 50;export const getAccessGroupListQueryOffsetDefault = 0; + +export const getAccessGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAccessGroupListQuerySizeDefault), + "offset": zod.number().default(getAccessGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAccessGroupListResponse = zod.object({ + "items": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional() +}) + + +/** + * Updates a datasource by its ID + * @summary Update datasource + */ +export const patchDatasourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchDatasourceByIdQueryParams = zod.object({ + "reason": zod.string().optional(), + "forceUniqueIdentifier": zod.boolean().optional(), + "forceRestrictedChangeKey": zod.string().optional() +}) + +export const patchDatasourceByIdBody = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + +export const patchDatasourceByIdResponse = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + + +/** + * Retrieves a datasource by its ID + * @summary Get datasource by ID + */ +export const getDatasourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDatasourceByIdQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional() +}) + +export const getDatasourceByIdResponse = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + + +/** + * Deletes a datasource by its ID + * @summary Delete datasource + */ +export const deleteDatasourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDatasourceByIdResponse = zod.object({ + +}) + + +/** + * Updates a datasource by its ID + * @summary Update datasource + */ +export const updateDatasourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateDatasourceByIdQueryParams = zod.object({ + "reason": zod.string().optional(), + "forceUniqueIdentifier": zod.boolean().optional(), + "forceRestrictedChangeKey": zod.string().optional() +}) + +export const updateDatasourceByIdBody = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + +export const updateDatasourceByIdResponse = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) + + +/** + * Retrieve a paginated list of audit logs + * @summary Get audit logs + */ +export const getAuditLogListQuerySizeDefault = 50;export const getAuditLogListQueryOffsetDefault = 0; + +export const getAuditLogListQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getAuditLogListQuerySizeDefault), + "offset": zod.number().default(getAuditLogListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAuditLogListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "happenedOnLocal": zod.string().optional().describe('The date and time that the action recorded in the access log entry occurred'), + "ip": zod.string().optional().describe('The IP address that the action was performed from'), + "happenedOn": zod.number().optional().describe('The time, in epoch seconds, that the action recorded in the access log entry occurred'), + "description": zod.string().optional().describe('The description of the action recorded in the access log entry'), + "id": zod.string().optional().describe('The Id of the access log entry'), + "username": zod.string().optional().describe('The username associated with the user that performed the action recorded in the access log entry ') +})).optional() +}) + + +/** + * Escalate the alert with the given ID + * @summary Escalate alert by ID + */ +export const escalatedAlertByIdParams = zod.object({ + "id": zod.string() +}) + +export const escalatedAlertByIdResponse = zod.object({ + +}) + + +/** + * Updates a diagnostics source by its ID + * @summary Update a diagnostics source + */ +export const patchDiagnosticSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchDiagnosticSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchDiagnosticSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const patchDiagnosticSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "dataType": zod.number().optional().describe('The data type of diagnostics source, default is 0. The values can be\n\n0: diagnostics source\n\n1: raw ERI\n\n '), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "source": zod.string().optional().describe('The diagnostics source'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The diagnostics source name'), + "inUse": zod.string().optional().describe('The diagnostics source is in use'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "installationStatuses": zod.array(zod.enum(['NEW', 'UPGRADED', 'AUDITED', 'OUTDATED', 'INSTALLED', 'CUSTOMIZED', 'CONFLICT', 'PARTIALLY_INSTALLED', 'IS_INSTALLED', 'IS_CUSTOMIZED', 'CAN_INSTALL', 'CAN_UPGRADE', 'CAN_SKIP', 'CAN_DOWNGRADE']).describe('The diagnostics Installation status')).optional().describe('The diagnostics Installation status'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Retrieves a diagnostics source by its ID + * @summary Get diagnostics sources by ID + */ +export const getDiagnosticSourcesByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDiagnosticSourcesByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getDiagnosticSourcesByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "dataType": zod.number().optional().describe('The data type of diagnostics source, default is 0. The values can be\n\n0: diagnostics source\n\n1: raw ERI\n\n '), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "source": zod.string().optional().describe('The diagnostics source'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The diagnostics source name'), + "inUse": zod.string().optional().describe('The diagnostics source is in use'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "installationStatuses": zod.array(zod.enum(['NEW', 'UPGRADED', 'AUDITED', 'OUTDATED', 'INSTALLED', 'CUSTOMIZED', 'CONFLICT', 'PARTIALLY_INSTALLED', 'IS_INSTALLED', 'IS_CUSTOMIZED', 'CAN_INSTALL', 'CAN_UPGRADE', 'CAN_SKIP', 'CAN_DOWNGRADE']).describe('The diagnostics Installation status')).optional().describe('The diagnostics Installation status'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Deletes a diagnostic source module by its ID + * @summary Delete a diagnostic source module + */ +export const deleteDiagnosticSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDiagnosticSourceByIdResponse = zod.object({ + +}) + + +/** + * Updates a diagnostics source by its ID + * @summary Update a diagnostics source + */ +export const updateDiagnosticSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateDiagnosticSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateDiagnosticSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const updateDiagnosticSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "groovyScript": zod.string().optional().describe('groovy script'), + "dataType": zod.number().optional().describe('The data type of diagnostics source, default is 0. The values can be\n\n0: diagnostics source\n\n1: raw ERI\n\n '), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "source": zod.string().optional().describe('The diagnostics source'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The diagnostics source name'), + "inUse": zod.string().optional().describe('The diagnostics source is in use'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "installationStatuses": zod.array(zod.enum(['NEW', 'UPGRADED', 'AUDITED', 'OUTDATED', 'INSTALLED', 'CUSTOMIZED', 'CONFLICT', 'PARTIALLY_INSTALLED', 'IS_INSTALLED', 'IS_CUSTOMIZED', 'CAN_INSTALL', 'CAN_UPGRADE', 'CAN_SKIP', 'CAN_DOWNGRADE']).describe('The diagnostics Installation status')).optional().describe('The diagnostics Installation status'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * update device instance alert setting + * @summary update device instance alert setting + */ +export const patchDeviceDatasourceInstanceAlertSettingByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('Device-DataSource ID'), + "instanceId": zod.number(), + "id": zod.number() +}) + +export const patchDeviceDatasourceInstanceAlertSettingByIdBody = zod.object({ + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +}) + +export const patchDeviceDatasourceInstanceAlertSettingByIdResponse = zod.object({ + "globalAlertExpr": zod.string().optional().describe('The global alert expression for this datapoint'), + "parentInstanceGroupAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 ( 1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Instance group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional().describe('The description of the datapoint the alert settings apply to'), + "globalEnableAnomalyAlertGeneration": zod.string().optional().describe('The global enable anomaly alert generation'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "disableDpAlertHostGroups": zod.string().optional().describe('The group full path lists who disable alert for this datapoint on devicegroup level'), + "dataPointName": zod.string().optional().describe('The name of the datapoint the alert settings apply to'), + "dataPointId": zod.number().optional().describe('The id of the Datapoint alert settings apply to'), + "globalEnableAnomalyAlertSuppression": zod.string().optional().describe('The global enable anomaly alert suppression'), + "deviceGroupId": zod.number().optional().describe('The ID of the device group'), + "id": zod.number().optional().describe('The id of this alert setting'), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "parentResourceDataSourceAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.string().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "resourceDatasourceId": zod.number().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Resource datasource alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "deviceGroupFullPath": zod.string().optional().describe('The full path of the device group'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "dataSourceInstanceId": zod.number().optional().describe('The id of the DataSource instance alert settings apply to'), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "parentDeviceGroupAlertExprList": zod.array(zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance')).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertingDisabledOn": zod.string().optional().describe('The datapoint is effected alert disabled by which group'), + "dataSourceInstanceAlias": zod.string().optional().describe('The alias (name) of the DataSource instance the alert settings apply to'), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +}) + + +/** + * get device instance alert setting + * @summary get device instance alert setting + */ +export const getDeviceDatasourceInstanceAlertSettingByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('Device-DataSource ID'), + "instanceId": zod.number(), + "id": zod.number() +}) + +export const getDeviceDatasourceInstanceAlertSettingByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceAlertSettingByIdResponse = zod.object({ + "globalAlertExpr": zod.string().optional().describe('The global alert expression for this datapoint'), + "parentInstanceGroupAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 ( 1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Instance group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional().describe('The description of the datapoint the alert settings apply to'), + "globalEnableAnomalyAlertGeneration": zod.string().optional().describe('The global enable anomaly alert generation'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "disableDpAlertHostGroups": zod.string().optional().describe('The group full path lists who disable alert for this datapoint on devicegroup level'), + "dataPointName": zod.string().optional().describe('The name of the datapoint the alert settings apply to'), + "dataPointId": zod.number().optional().describe('The id of the Datapoint alert settings apply to'), + "globalEnableAnomalyAlertSuppression": zod.string().optional().describe('The global enable anomaly alert suppression'), + "deviceGroupId": zod.number().optional().describe('The ID of the device group'), + "id": zod.number().optional().describe('The id of this alert setting'), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "parentResourceDataSourceAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.string().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "resourceDatasourceId": zod.number().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Resource datasource alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "deviceGroupFullPath": zod.string().optional().describe('The full path of the device group'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "dataSourceInstanceId": zod.number().optional().describe('The id of the DataSource instance alert settings apply to'), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "parentDeviceGroupAlertExprList": zod.array(zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance')).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertingDisabledOn": zod.string().optional().describe('The datapoint is effected alert disabled by which group'), + "dataSourceInstanceAlias": zod.string().optional().describe('The alias (name) of the DataSource instance the alert settings apply to'), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +}) + + +/** + * update device instance alert setting + * @summary update device instance alert setting + */ +export const updateDeviceDatasourceInstanceAlertSettingByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('Device-DataSource ID'), + "instanceId": zod.number(), + "id": zod.number() +}) + +export const updateDeviceDatasourceInstanceAlertSettingByIdBody = zod.object({ + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +}) + +export const updateDeviceDatasourceInstanceAlertSettingByIdResponse = zod.object({ + "globalAlertExpr": zod.string().optional().describe('The global alert expression for this datapoint'), + "parentInstanceGroupAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 ( 1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Instance group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertForNoData": zod.number().optional().describe('alert for no data (no alert-1, warning-2, error-3, critical-4)'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter for complex DataPoint and instance level configCheck threshold.'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled for the datapoint'), + "globalAlertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "dataPointDescription": zod.string().optional().describe('The description of the datapoint the alert settings apply to'), + "globalEnableAnomalyAlertGeneration": zod.string().optional().describe('The global enable anomaly alert generation'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "disableDpAlertHostGroups": zod.string().optional().describe('The group full path lists who disable alert for this datapoint on devicegroup level'), + "dataPointName": zod.string().optional().describe('The name of the datapoint the alert settings apply to'), + "dataPointId": zod.number().optional().describe('The id of the Datapoint alert settings apply to'), + "globalEnableAnomalyAlertSuppression": zod.string().optional().describe('The global enable anomaly alert suppression'), + "deviceGroupId": zod.number().optional().describe('The ID of the device group'), + "id": zod.number().optional().describe('The id of this alert setting'), + "globalAlertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "parentResourceDataSourceAlertExpr": zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.string().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "resourceDatasourceId": zod.number().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.string().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).optional().describe('Resource datasource alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "deviceGroupFullPath": zod.string().optional().describe('The full path of the device group'), + "alertTransitionInterval": zod.number().optional().describe('The polling interval of alert transition (0-60)'), + "globalAlertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "alertClearInterval": zod.number().optional().describe('The polling interval of alert clear transition (0-60)'), + "criticalAdAdvSetting": zod.string().optional(), + "alertExprNote": zod.string().optional().describe('The note associated with the current alert threshold settings'), + "adAdvSettingEnabled": zod.boolean().optional(), + "errorAdAdvSetting": zod.string().optional(), + "dataSourceInstanceId": zod.number().optional().describe('The id of the DataSource instance alert settings apply to'), + "warnAdAdvSetting": zod.string().optional(), + "globalPostProcessorParam": zod.string().optional().describe('The post processor parameters for complex DataPoints and global level configCheck threshold.'), + "parentDeviceGroupAlertExprList": zod.array(zod.object({ + "enableAnomalyAlertGeneration": zod.string().optional().describe('enable anomaly alert generation'), + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 1-4 (1:no alert, 2:warn alert, 3:error alert, 4:critical alert)'), + "userPermission": zod.string().optional(), + "enableAnomalyAlertSuppression": zod.string().optional().describe('enable anomaly alert suppression'), + "groupId": zod.number().optional(), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "alertEnabled": zod.boolean().optional(), + "groupFullPath": zod.string().optional(), + "alertExpr": zod.string().optional(), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered') +}).describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance')).optional().describe('Device group alert expression list base on the priority. The first is the highest priority and effected on this instance'), + "alertingDisabledOn": zod.string().optional().describe('The datapoint is effected alert disabled by which group'), + "dataSourceInstanceAlias": zod.string().optional().describe('The alias (name) of the DataSource instance the alert settings apply to'), + "collectionInterval": zod.number().optional().describe('Collection Interval'), + "alertExpr": zod.string().optional().describe('The thresholds that should be associated with the datapoint. Note that you need to have a space between the operator and each threshold (e.g. > 1 2 3)') +}) + + +/** + * get top talkers graph + * @summary get top talkers graph + */ +export const getTopTalkersGraphParams = zod.object({ + "id": zod.number() +}) + +export const getTopTalkersGraphQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "format": zod.string().optional(), + "keyword": zod.string().optional() +}) + +export const getTopTalkersGraphResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * update collector + * @summary update collector + */ +export const patchCollectorByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchCollectorByIdQueryParams = zod.object({ + "autoBalanceMonitoredDevices": zod.boolean().optional(), + "forceUpdateFailedOverDevices": zod.boolean().optional(), + "opType": zod.string().optional() +}) + +export const patchCollectorByIdBody = zod.object({ + "numberOfInstances": zod.number().optional(), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "collectorList": zod.string().optional(), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "description": zod.string().optional().describe('The Collector\'s description'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "errorMsg": zod.string().optional(), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over') +}) + +export const patchCollectorByIdResponse = zod.object({ + "userChangeOn": zod.number().optional().describe('The last time the Collector was updated, in epoch format'), + "confVersion": zod.string().optional().describe('The version of the agent.conf configuration file'), + "downloadUrl": zod.string().optional().describe('Download Url'), + "updatedOnLocal": zod.string().optional().describe('The time that the Collector was last updated, in local time format'), + "collectorType": zod.string().optional().describe('Collector type'), + "encodedConfigData": zod.string().optional().describe('Base 64 encoded config data'), + "hostname": zod.string().optional().describe('The hostname of the device the Collector is installed on'), + "numberOfInstances": zod.number().optional(), + "id": zod.number().optional().describe('The id of the Collector'), + "ea": zod.boolean().optional().describe('Whether the collector is in EA version'), + "watchdogUpdatedOnLocal": zod.string().optional().describe('The time that the Collector Watchdog was last updated, in local time format'), + "hasFailOverDevice": zod.boolean().optional().describe('Whether the collector has failover devices'), + "collectorGroupName": zod.string().optional().describe('The name of the group the Collector is in'), + "netscanVersion": zod.string().optional().describe('The Netscan version associated with the Collector'), + "inSDT": zod.boolean().optional().describe('The SDT status of the collector'), + "isEncoded": zod.boolean().optional(), + "format": zod.string().optional().describe('External collector installation format'), + "updatedOn": zod.number().optional().describe('The time that the Collector was last updated, in epoch format'), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "numberOfHosts": zod.number().optional().describe('The number of devices monitored by the Collector'), + "collectorList": zod.string().optional(), + "collectorConf": zod.string().optional().describe('The Collector\'s configuration file'), + "sbproxyConf": zod.string().optional().describe('The Proxy\'s configuration'), + "agentConfFields": zod.record(zod.string(), zod.string().describe('This is key value pairs of collector config properties')).optional().describe('This is key value pairs of collector config properties'), + "userVisibleWebsitesNum": zod.number().optional().describe('The number of websites monitored by the Collector and visible to the user that made the query'), + "lastSentNotificationOnLocal": zod.string().optional().describe('The time that a notification was last sent for this Collector, in local time format'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "predefinedConfig": zod.object({ + +}).optional().describe('Collector configurations'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "wrapperConf": zod.string().optional().describe('The java service wrapper\'s configuration'), + "clearSent": zod.boolean().optional().describe('Whether or not an alert clear notifcation has been sent for this Collector'), + "isLmlogsSyslogEnabled": zod.boolean().optional().describe('Whether collector has isLmlogsSyslogEnabled flag set as true'), + "status": zod.number().optional().describe('The registration status of the Collector. Acceptable values are: 0= unregistered, 1= registered, 2= stopped, 3= suspended'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "isAdminAccount": zod.boolean().optional().describe('Whether Collector is using an administrative account'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "collectorSize": zod.string().optional().describe('The size of the collector'), + "ackedOnLocal": zod.string().optional().describe('The time that the Collector was acknowledged (if it is in alert), in local time format'), + "watchdogConf": zod.string().optional().describe('The Watchdog\'s configuration'), + "description": zod.string().optional().describe('The Collector\'s description'), + "createdOn": zod.number().optional().describe('The time that the Collector was created, in epoch format'), + "platform": zod.string().optional().describe('The OS of the Collector device (e.g. Linux, Windows)'), + "isDown": zod.boolean().optional().describe('Whether or not the Collector is currently down'), + "userVisibleHostsNum": zod.number().optional().describe('The number of devices monitored by the Collector and visible to the user that made the query'), + "canDowngrade": zod.boolean().optional().describe('Whether the collector can be downgraded to a lower version'), + "ackComment": zod.string().optional().describe('The comment associated with the Collector acknowledgement (if it is in alert and acknowledged)'), + "nextUpgradeInfo": zod.object({ + "upgradeTime": zod.string().optional(), + "stable": zod.boolean().optional(), + "majorVersion": zod.number().optional(), + "minorVersion": zod.number().optional(), + "mandatory": zod.boolean().optional(), + "upgradeTimeEpoch": zod.number().optional() +}).optional().describe('The details of the Collector\'s next upgrade, if one has been scheduled'), + "enableLMLogs": zod.boolean().optional().describe('Usage of the Otel Collector - logging or tracing'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "nextRecipient": zod.number().optional().describe('The Id of the next recipient to which alert notifications will be sent'), + "ackedOn": zod.number().optional().describe('The epoch at which the Collector was acknowledged (if it is in alert)'), + "userChangeOnLocal": zod.string().optional().describe('The last time the Collector was updated, in the account time zone'), + "numberOfWebsites": zod.number().optional().describe('The number of websites monitored by the Collector'), + "collectorDeviceId": zod.number().optional().describe('The device id of the collector device'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the Collector (if it is in alert)'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request to get Collector information'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "watchdogUpdatedOn": zod.number().optional().describe('The time that the Watchdog Services was last updated, in epoch format'), + "canDowngradeReason": zod.string().optional().describe('The reason why the collector can be downgraded'), + "lastSentNotificationOn": zod.number().optional().describe('The time, in epoch format, that a notification was last sent for the Collector'), + "syntheticsEnabled": zod.boolean().optional().describe('Whether the collector can monitor Synthetic devices (Selenium grid property must be defined)'), + "acked": zod.boolean().optional().describe('Whether or not the Collector is currently acknowledged'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "websiteConf": zod.string().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "copyUrl": zod.string().optional().describe('Copy Command Url'), + "errorMsg": zod.string().optional(), + "upTime": zod.number().optional().describe('The time the Collector has been up, in seconds'), + "otelVersion": zod.string().optional().describe('Collector Version'), + "numberOfSDTs": zod.number().optional().describe('The number of Collectors Sdts '), + "bearerToken": zod.string().optional().describe('Bearer Token'), + "build": zod.string().optional().describe('The Collector version'), + "previousVersion": zod.string().optional().describe('The previous version of the collector, used for downgrading'), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "createdOnLocal": zod.string().optional().describe('The time that the Collector was created, in local time format'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "arch": zod.string().optional().describe('The collector architecture (Windows | Linux platform followed by 32 | 64 bit)'), + "otelId": zod.string().optional().describe('Collector Id'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "config": zod.string().optional().describe('Collector Config') +}) + + +/** + * get collector + * @summary get collector + */ +export const getCollectorByIdParams = zod.object({ + "id": zod.number() +}) + +export const getCollectorByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getCollectorByIdResponse = zod.object({ + "userChangeOn": zod.number().optional().describe('The last time the Collector was updated, in epoch format'), + "confVersion": zod.string().optional().describe('The version of the agent.conf configuration file'), + "downloadUrl": zod.string().optional().describe('Download Url'), + "updatedOnLocal": zod.string().optional().describe('The time that the Collector was last updated, in local time format'), + "collectorType": zod.string().optional().describe('Collector type'), + "encodedConfigData": zod.string().optional().describe('Base 64 encoded config data'), + "hostname": zod.string().optional().describe('The hostname of the device the Collector is installed on'), + "numberOfInstances": zod.number().optional(), + "id": zod.number().optional().describe('The id of the Collector'), + "ea": zod.boolean().optional().describe('Whether the collector is in EA version'), + "watchdogUpdatedOnLocal": zod.string().optional().describe('The time that the Collector Watchdog was last updated, in local time format'), + "hasFailOverDevice": zod.boolean().optional().describe('Whether the collector has failover devices'), + "collectorGroupName": zod.string().optional().describe('The name of the group the Collector is in'), + "netscanVersion": zod.string().optional().describe('The Netscan version associated with the Collector'), + "inSDT": zod.boolean().optional().describe('The SDT status of the collector'), + "isEncoded": zod.boolean().optional(), + "format": zod.string().optional().describe('External collector installation format'), + "updatedOn": zod.number().optional().describe('The time that the Collector was last updated, in epoch format'), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "numberOfHosts": zod.number().optional().describe('The number of devices monitored by the Collector'), + "collectorList": zod.string().optional(), + "collectorConf": zod.string().optional().describe('The Collector\'s configuration file'), + "sbproxyConf": zod.string().optional().describe('The Proxy\'s configuration'), + "agentConfFields": zod.record(zod.string(), zod.string().describe('This is key value pairs of collector config properties')).optional().describe('This is key value pairs of collector config properties'), + "userVisibleWebsitesNum": zod.number().optional().describe('The number of websites monitored by the Collector and visible to the user that made the query'), + "lastSentNotificationOnLocal": zod.string().optional().describe('The time that a notification was last sent for this Collector, in local time format'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "predefinedConfig": zod.object({ + +}).optional().describe('Collector configurations'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "wrapperConf": zod.string().optional().describe('The java service wrapper\'s configuration'), + "clearSent": zod.boolean().optional().describe('Whether or not an alert clear notifcation has been sent for this Collector'), + "isLmlogsSyslogEnabled": zod.boolean().optional().describe('Whether collector has isLmlogsSyslogEnabled flag set as true'), + "status": zod.number().optional().describe('The registration status of the Collector. Acceptable values are: 0= unregistered, 1= registered, 2= stopped, 3= suspended'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "isAdminAccount": zod.boolean().optional().describe('Whether Collector is using an administrative account'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "collectorSize": zod.string().optional().describe('The size of the collector'), + "ackedOnLocal": zod.string().optional().describe('The time that the Collector was acknowledged (if it is in alert), in local time format'), + "watchdogConf": zod.string().optional().describe('The Watchdog\'s configuration'), + "description": zod.string().optional().describe('The Collector\'s description'), + "createdOn": zod.number().optional().describe('The time that the Collector was created, in epoch format'), + "platform": zod.string().optional().describe('The OS of the Collector device (e.g. Linux, Windows)'), + "isDown": zod.boolean().optional().describe('Whether or not the Collector is currently down'), + "userVisibleHostsNum": zod.number().optional().describe('The number of devices monitored by the Collector and visible to the user that made the query'), + "canDowngrade": zod.boolean().optional().describe('Whether the collector can be downgraded to a lower version'), + "ackComment": zod.string().optional().describe('The comment associated with the Collector acknowledgement (if it is in alert and acknowledged)'), + "nextUpgradeInfo": zod.object({ + "upgradeTime": zod.string().optional(), + "stable": zod.boolean().optional(), + "majorVersion": zod.number().optional(), + "minorVersion": zod.number().optional(), + "mandatory": zod.boolean().optional(), + "upgradeTimeEpoch": zod.number().optional() +}).optional().describe('The details of the Collector\'s next upgrade, if one has been scheduled'), + "enableLMLogs": zod.boolean().optional().describe('Usage of the Otel Collector - logging or tracing'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "nextRecipient": zod.number().optional().describe('The Id of the next recipient to which alert notifications will be sent'), + "ackedOn": zod.number().optional().describe('The epoch at which the Collector was acknowledged (if it is in alert)'), + "userChangeOnLocal": zod.string().optional().describe('The last time the Collector was updated, in the account time zone'), + "numberOfWebsites": zod.number().optional().describe('The number of websites monitored by the Collector'), + "collectorDeviceId": zod.number().optional().describe('The device id of the collector device'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the Collector (if it is in alert)'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request to get Collector information'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "watchdogUpdatedOn": zod.number().optional().describe('The time that the Watchdog Services was last updated, in epoch format'), + "canDowngradeReason": zod.string().optional().describe('The reason why the collector can be downgraded'), + "lastSentNotificationOn": zod.number().optional().describe('The time, in epoch format, that a notification was last sent for the Collector'), + "syntheticsEnabled": zod.boolean().optional().describe('Whether the collector can monitor Synthetic devices (Selenium grid property must be defined)'), + "acked": zod.boolean().optional().describe('Whether or not the Collector is currently acknowledged'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "websiteConf": zod.string().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "copyUrl": zod.string().optional().describe('Copy Command Url'), + "errorMsg": zod.string().optional(), + "upTime": zod.number().optional().describe('The time the Collector has been up, in seconds'), + "otelVersion": zod.string().optional().describe('Collector Version'), + "numberOfSDTs": zod.number().optional().describe('The number of Collectors Sdts '), + "bearerToken": zod.string().optional().describe('Bearer Token'), + "build": zod.string().optional().describe('The Collector version'), + "previousVersion": zod.string().optional().describe('The previous version of the collector, used for downgrading'), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "createdOnLocal": zod.string().optional().describe('The time that the Collector was created, in local time format'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "arch": zod.string().optional().describe('The collector architecture (Windows | Linux platform followed by 32 | 64 bit)'), + "otelId": zod.string().optional().describe('Collector Id'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "config": zod.string().optional().describe('Collector Config') +}) + + +/** + * delete collector + * @summary delete collector + */ +export const deleteCollectorByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteCollectorByIdResponse = zod.object({ + +}) + + +/** + * update collector + * @summary update collector + */ +export const updateCollectorByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateCollectorByIdQueryParams = zod.object({ + "autoBalanceMonitoredDevices": zod.boolean().optional(), + "forceUpdateFailedOverDevices": zod.boolean().optional(), + "opType": zod.string().optional() +}) + +export const updateCollectorByIdBody = zod.object({ + "numberOfInstances": zod.number().optional(), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "collectorList": zod.string().optional(), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "description": zod.string().optional().describe('The Collector\'s description'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "errorMsg": zod.string().optional(), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over') +}) + +export const updateCollectorByIdResponse = zod.object({ + "userChangeOn": zod.number().optional().describe('The last time the Collector was updated, in epoch format'), + "confVersion": zod.string().optional().describe('The version of the agent.conf configuration file'), + "downloadUrl": zod.string().optional().describe('Download Url'), + "updatedOnLocal": zod.string().optional().describe('The time that the Collector was last updated, in local time format'), + "collectorType": zod.string().optional().describe('Collector type'), + "encodedConfigData": zod.string().optional().describe('Base 64 encoded config data'), + "hostname": zod.string().optional().describe('The hostname of the device the Collector is installed on'), + "numberOfInstances": zod.number().optional(), + "id": zod.number().optional().describe('The id of the Collector'), + "ea": zod.boolean().optional().describe('Whether the collector is in EA version'), + "watchdogUpdatedOnLocal": zod.string().optional().describe('The time that the Collector Watchdog was last updated, in local time format'), + "hasFailOverDevice": zod.boolean().optional().describe('Whether the collector has failover devices'), + "collectorGroupName": zod.string().optional().describe('The name of the group the Collector is in'), + "netscanVersion": zod.string().optional().describe('The Netscan version associated with the Collector'), + "inSDT": zod.boolean().optional().describe('The SDT status of the collector'), + "isEncoded": zod.boolean().optional(), + "format": zod.string().optional().describe('External collector installation format'), + "updatedOn": zod.number().optional().describe('The time that the Collector was last updated, in epoch format'), + "automaticUpgradeInfo": zod.object({ + "dayOfWeek": zod.string(), + "hour": zod.number(), + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "description": zod.string().optional(), + "occurrence": zod.string(), + "type": zod.string().optional(), + "version": zod.string(), + "minute": zod.number() +}).optional().describe('The details of the Collector\'s automatic upgrade schedule, if one exists'), + "numberOfHosts": zod.number().optional().describe('The number of devices monitored by the Collector'), + "collectorList": zod.string().optional(), + "collectorConf": zod.string().optional().describe('The Collector\'s configuration file'), + "sbproxyConf": zod.string().optional().describe('The Proxy\'s configuration'), + "agentConfFields": zod.record(zod.string(), zod.string().describe('This is key value pairs of collector config properties')).optional().describe('This is key value pairs of collector config properties'), + "userVisibleWebsitesNum": zod.number().optional().describe('The number of websites monitored by the Collector and visible to the user that made the query'), + "lastSentNotificationOnLocal": zod.string().optional().describe('The time that a notification was last sent for this Collector, in local time format'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the Collector'), + "predefinedConfig": zod.object({ + +}).optional().describe('Collector configurations'), + "calculatedThreshold": zod.number().optional().describe('calculated threshold value for ABCG collector to check if a collector has high load'), + "onetimeUpgradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s one time upgrade, if one has been scheduled'), + "wrapperConf": zod.string().optional().describe('The java service wrapper\'s configuration'), + "clearSent": zod.boolean().optional().describe('Whether or not an alert clear notifcation has been sent for this Collector'), + "isLmlogsSyslogEnabled": zod.boolean().optional().describe('Whether collector has isLmlogsSyslogEnabled flag set as true'), + "status": zod.number().optional().describe('The registration status of the Collector. Acceptable values are: 0= unregistered, 1= registered, 2= stopped, 3= suspended'), + "backupAgentId": zod.number().optional().describe('The Id of the backup Collector assigned to the Collector'), + "isAdminAccount": zod.boolean().optional().describe('Whether Collector is using an administrative account'), + "specifiedCollectorDeviceGroupId": zod.number().optional().describe('The device group id when create a new collector device'), + "escalatingChainId": zod.number().optional().describe('The Id of the escalation chain associated with this Collector'), + "collectorSize": zod.string().optional().describe('The size of the collector'), + "ackedOnLocal": zod.string().optional().describe('The time that the Collector was acknowledged (if it is in alert), in local time format'), + "watchdogConf": zod.string().optional().describe('The Watchdog\'s configuration'), + "description": zod.string().optional().describe('The Collector\'s description'), + "createdOn": zod.number().optional().describe('The time that the Collector was created, in epoch format'), + "platform": zod.string().optional().describe('The OS of the Collector device (e.g. Linux, Windows)'), + "isDown": zod.boolean().optional().describe('Whether or not the Collector is currently down'), + "userVisibleHostsNum": zod.number().optional().describe('The number of devices monitored by the Collector and visible to the user that made the query'), + "canDowngrade": zod.boolean().optional().describe('Whether the collector can be downgraded to a lower version'), + "ackComment": zod.string().optional().describe('The comment associated with the Collector acknowledgement (if it is in alert and acknowledged)'), + "nextUpgradeInfo": zod.object({ + "upgradeTime": zod.string().optional(), + "stable": zod.boolean().optional(), + "majorVersion": zod.number().optional(), + "minorVersion": zod.number().optional(), + "mandatory": zod.boolean().optional(), + "upgradeTimeEpoch": zod.number().optional() +}).optional().describe('The details of the Collector\'s next upgrade, if one has been scheduled'), + "enableLMLogs": zod.boolean().optional().describe('Usage of the Otel Collector - logging or tracing'), + "suppressAlertClear": zod.boolean().optional().describe('Whether alert clear notifications are suppressed for the Collector'), + "nextRecipient": zod.number().optional().describe('The Id of the next recipient to which alert notifications will be sent'), + "ackedOn": zod.number().optional().describe('The epoch at which the Collector was acknowledged (if it is in alert)'), + "userChangeOnLocal": zod.string().optional().describe('The last time the Collector was updated, in the account time zone'), + "numberOfWebsites": zod.number().optional().describe('The number of websites monitored by the Collector'), + "collectorDeviceId": zod.number().optional().describe('The device id of the collector device'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the Collector (if it is in alert)'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request to get Collector information'), + "needAutoCreateCollectorDevice": zod.boolean().optional().describe('Whether to create a collector device when instance collector, the default value is true'), + "watchdogUpdatedOn": zod.number().optional().describe('The time that the Watchdog Services was last updated, in epoch format'), + "canDowngradeReason": zod.string().optional().describe('The reason why the collector can be downgraded'), + "lastSentNotificationOn": zod.number().optional().describe('The time, in epoch format, that a notification was last sent for the Collector'), + "syntheticsEnabled": zod.boolean().optional().describe('Whether the collector can monitor Synthetic devices (Selenium grid property must be defined)'), + "acked": zod.boolean().optional().describe('Whether or not the Collector is currently acknowledged'), + "onetimeDowngradeInfo": zod.object({ + "createdBy": zod.string().optional(), + "level": zod.string().optional(), + "timezone": zod.string().optional(), + "endEpoch": zod.number().optional(), + "description": zod.string().optional(), + "type": zod.string().optional(), + "majorVersion": zod.number(), + "minorVersion": zod.number(), + "startEpoch": zod.number() +}).optional().describe('The details of the Collector\'s automatic downgrade schedule, if one exists'), + "websiteConf": zod.string().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "copyUrl": zod.string().optional().describe('Copy Command Url'), + "errorMsg": zod.string().optional(), + "upTime": zod.number().optional().describe('The time the Collector has been up, in seconds'), + "otelVersion": zod.string().optional().describe('Collector Version'), + "numberOfSDTs": zod.number().optional().describe('The number of Collectors Sdts '), + "bearerToken": zod.string().optional().describe('Bearer Token'), + "build": zod.string().optional().describe('The Collector version'), + "previousVersion": zod.string().optional().describe('The previous version of the collector, used for downgrading'), + "collectorGroupId": zod.number().optional().describe('The Id of the group the Collector is in'), + "createdOnLocal": zod.string().optional().describe('The time that the Collector was created, in local time format'), + "enableFailBack": zod.boolean().optional().describe('Whether or not automatic failback is enabled for the Collector, the default value is true'), + "resendIval": zod.number().optional().describe('The interval, in minutes, after which alert notifications for the Collector will be resent'), + "arch": zod.string().optional().describe('The collector architecture (Windows | Linux platform followed by 32 | 64 bit)'), + "otelId": zod.string().optional().describe('Collector Id'), + "enableFailOverOnCollectorDevice": zod.boolean().optional().describe('Whether or not the device the Collector is installed on is enabled for fail over'), + "config": zod.string().optional().describe('Collector Config') +}) + + +/** + * Import a LogSource using json data + * @summary Import LogSource via json + */ +export const importLogSourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importLogSourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importLogSourceJsonResponse = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + + +/** + * get collector installer + * @summary get collector installer + */ +export const getCollectorInstallerParams = zod.object({ + "collectorId": zod.number(), + "osAndArch": zod.string() +}) + +export const getCollectorInstallerQueryParams = zod.object({ + "collectorVersion": zod.number().optional().describe('The version of the installer you\'d like to download. This defaults to the latest GD Collector, unless useEA is true'), + "token": zod.string().optional(), + "monitorOthers": zod.boolean().optional(), + "collectorSize": zod.string().optional().describe('The size of the Collector you\'d like to install. Options are nano, small (requires 2GB memory), medium (requires 4GB memory), large (requires 8GB memory), extra large (requires 16GB memory), double extra large (requires 32GB memory). Requires collector version 22.180 or higher. Defaults to small'), + "useEA": zod.boolean().optional().describe('If true, the latest EA Collector version will be used. Defaults to false') +}) + +export const getCollectorInstallerResponse = zod.instanceof(File) + + +/** + * Import a EventSource using json data + * @summary Import EventSource via json + */ +export const importEventSourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importEventSourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importEventSourceJsonResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + + +/** + * Add a new recipient group + * @summary Add recipient group + */ +export const addRecipientGroupBody = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group') +}) + +export const addRecipientGroupResponse = zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group'), + "id": zod.number().optional() +}) + + +/** + * Retrieve a paginated list of recipient groups + * @summary Get recipient group list + */ +export const getRecipientGroupListQuerySizeDefault = 50;export const getRecipientGroupListQueryOffsetDefault = 0; + +export const getRecipientGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getRecipientGroupListQuerySizeDefault), + "offset": zod.number().default(getRecipientGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getRecipientGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "groupName": zod.string().describe('The name of the recipient group'), + "recipients": zod.array(zod.object({ + "method": zod.string().describe('Recipient method for each type. \nThe values can be EMAIL|SMEMAIL|VOICE|SMS \n group: \"method\" not used\n arbitrary: The method should be email.\n admin: The method should be email, smsEmail, voice, sms, or defaultMethod;\n'), + "contact": zod.string().describe('Contact details, email address or phone number'), + "type": zod.string().describe('The recipient type. \nThe values can be GROUP|ARBITRARY|ADMIN, where Admin = a user, and Arbitrary = an arbitrary email'), + "addr": zod.string().describe('The recipient address. \nThe value will be user name if method = admin, or the email address if method = arbitrary') +}).describe('The chain\'s cc destinations')).optional().describe('The recipients in the group'), + "description": zod.string().optional().describe('The description of the recipient group'), + "id": zod.number().optional() +})).optional() +}) + + +/** + * Update a specific property of a device group + * @summary Update device group property + */ +export const patchDeviceGroupPropertyByNameParams = zod.object({ + "gid": zod.number().describe('group ID'), + "name": zod.string() +}) + +export const patchDeviceGroupPropertyByNameBody = zod.object({ + +}) + +export const patchDeviceGroupPropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Retrieve a specific device group property by its name + * @summary Get device group property by name + */ +export const getDeviceGroupPropertyByNameParams = zod.object({ + "gid": zod.number().describe('group ID'), + "name": zod.string() +}) + +export const getDeviceGroupPropertyByNameQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceGroupPropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Delete a specific property of a device group by its name + * @summary Delete device group property + */ +export const deleteDeviceGroupPropertyByNameParams = zod.object({ + "gid": zod.number().describe('group ID'), + "name": zod.string() +}) + +export const deleteDeviceGroupPropertyByNameResponse = zod.object({ + +}) + + +/** + * Update a specific property of a device group + * @summary Update device group property + */ +export const updateDeviceGroupPropertyByNameParams = zod.object({ + "gid": zod.number().describe('group ID'), + "name": zod.string() +}) + +export const updateDeviceGroupPropertyByNameBody = zod.object({ + +}) + +export const updateDeviceGroupPropertyByNameResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Get the result of a Collector debug command using sessionId + * @summary Get the result of a Collector debug command using sessionId + */ +export const getDebugCommandResultParams = zod.object({ + "id": zod.string() +}) + +export const getDebugCommandResultQueryParams = zod.object({ + "collectorId": zod.number().optional() +}) + +export const getDebugCommandResultResponse = zod.object({ + "output": zod.string().optional().describe('The value of the debug command'), + "cmdline": zod.string().optional().describe('The debug command to execute'), + "cmdContext": zod.string().optional().describe('The session prefix name'), + "sessionId": zod.string().optional().describe('The session id') +}) + + +/** + * Updates an existing log source + * @summary Update log source + */ +export const patchLogSourceParams = zod.object({ + "id": zod.number() +}) + +export const patchLogSourceQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchLogSourceBody = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().optional().describe('The log source name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + +export const patchLogSourceResponse = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + + +/** + * Retrieves a specific log source by its ID + * @summary Get log source + */ +export const getLogSourceByIdParams = zod.object({ + "id": zod.string() +}) + +export const getLogSourceByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getLogSourceByIdResponse = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + + +/** + * Deletes an existing log source + * @summary Delete log source + */ +export const deleteLogSourceParams = zod.object({ + "id": zod.number() +}) + +export const deleteLogSourceResponse = zod.object({ + +}) + + +/** + * Updates an existing log source + * @summary Update log source + */ +export const updateLogSourceParams = zod.object({ + "id": zod.number() +}) + +export const updateLogSourceQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateLogSourceBody = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().optional().describe('The log source name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + +export const updateLogSourceResponse = zod.object({ + "collectionMethod": zod.enum(['INVALID', 'WIN_EVENT', 'SYSLOG', 'DUMMY', 'SCRAPE_LOGS', 'KUBERNETES_EVENT', 'KUBERNETES_POD', 'SCRIPT', 'SAAS_O365_AUDIT_LOGS', 'SNMP_TRAP', 'WEBHOOK']).optional(), + "appliesToScript": zod.string().optional().describe('The appliesToScript'), + "resourceMapping": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip', 'FQDN', 'HOSTNAME', 'HostName', 'HOST_WITHOUT_DNS', 'HostWithoutDNS']).optional().describe('The LogSourceResourceMapping method'), + "index": zod.string().optional().describe('The LogSourceResourceMapping index'), + "comment": zod.string().optional().describe('The LogSourceResourceMapping comment'), + "id": zod.string().optional().describe('The LogSourceResourceMapping id'), + "value": zod.string().optional().describe('The LogSourceResourceMapping value'), + "key": zod.string().optional().describe('The LogSourceResourceMapping key') +}).describe('resource mapping')).optional().describe('resource mapping'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "collectionAttribute": zod.object({ + +}).optional().describe('collectionAttribute'), + "changelogs": zod.array(zod.object({ + "reasons": zod.string().optional(), + "ip": zod.string().optional(), + "happenedOn": zod.number().optional(), + "id": zod.number().optional(), + "type": zod.string().optional(), + "objectId": zod.number().optional(), + "username": zod.string().optional() +})).optional(), + "description": zod.string().optional().describe('description'), + "filters": zod.array(zod.object({ + "include": zod.string().optional(), + "index": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.string().optional(), + "attribute": zod.string().optional(), + "value": zod.string().optional(), + "operator": zod.string().optional() +})).optional(), + "technicalNotes": zod.string().optional().describe('The technicalNotes'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.array(zod.string().describe('tags')).optional().describe('tags'), + "logFields": zod.array(zod.object({ + "method": zod.enum(['INVALID', 'Invalid', 'STATIC', 'Static', 'TOKEN', 'Token', 'REGEX', 'Regex', 'ATTRIBUTE', 'Attribute', 'REGEX_GROUP', 'RegexGroup', 'IP', 'Ip']).optional().describe('The LogSource method'), + "comment": zod.string().optional().describe('The LogSource comment'), + "id": zod.string().optional().describe('The LogSource id'), + "value": zod.string().optional().describe('The LogSource value'), + "key": zod.string().optional().describe('The LogSource key') +})).optional(), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().optional().describe('The log source name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "collectionInterval": zod.object({ + "offset": zod.number().optional(), + "units": zod.enum(['INVALID', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', 'WEEKS', 'MONTHS', 'YEARS']).optional() +}).optional(), + "group": zod.string().optional().describe('group') +}) + + +/** + * Add website. Request structure may vary based on the check type {PingCheck | WebCheck model}. Use the respective model in SDK. + * @summary Add website + */ +export const addWebsiteBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location') +}) + +export const addWebsiteResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +}) + + +/** + * get website list + * @summary get website list + */ +export const getWebsiteListQuerySizeDefault = 50;export const getWebsiteListQueryOffsetDefault = 0; + +export const getWebsiteListQueryParams = zod.object({ + "collectorIds": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getWebsiteListQuerySizeDefault), + "offset": zod.number().default(getWebsiteListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWebsiteListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +})).optional() +}) + + +/** + * add dashboard group asynchronously + * @summary add dashboard group asynchronously + */ +export const addDashboardGroupAsynchronouslyParams = zod.object({ + "id": zod.number() +}) + +export const addDashboardGroupAsynchronouslyQueryParams = zod.object({ + "recursive": zod.boolean().optional() +}) + +export const addDashboardGroupAsynchronouslyBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group') +}) + +export const addDashboardGroupAsynchronouslyResponse = zod.object({ + "jobId": zod.number().optional().describe('The jobId of the Clone Dashboard Group') +}) + + +/** + * Create a new OID and add it to the system + * @summary Add a new OID + */ +export const addOidBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s') +}) + +export const addOidResponseIdMin = 0; + + + +export const addOidResponse = zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(addOidResponseIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +}) + + +/** + * Retrieve the list of OIDs + * @summary Get OID's list + */ +export const getOIDListResponseItemsItemIdMin = 0; + + + +export const getOIDListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('Checksum generated from the content of the module'), + "id": zod.number().min(getOIDListResponseItemsItemIdMin).optional().describe('Local ID of the module'), + "oid": zod.string().describe('The OID pattern to match to'), + "categories": zod.string().optional().describe('Categories to match the OID on'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "lineageId": zod.string().optional().describe('The lineage ID that the LMModule belongs to') +})).optional() +}) + + +/** + * update SDT (Response may contain extra fields depending upon the type of SDT being updated) + * @summary update SDT (Response may contain extra fields depending upon the type of SDT being updated) + */ +export const patchSdtByIdParams = zod.object({ + "id": zod.string() +}) + +export const patchSdtByIdBody = zod.object({ + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + +export const patchSdtByIdResponse = zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + + +/** + * get SDT by id (Response may contain extra fields depending upon the type of SDT of given id) + * @summary get SDT by id (Response may contain extra fields depending upon the type of SDT of given id) + */ +export const getSdtByIdParams = zod.object({ + "id": zod.string() +}) + +export const getSdtByIdResponse = zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + + +/** + * delete SDT + * @summary delete SDT + */ +export const deleteSdtByIdParams = zod.object({ + "id": zod.string() +}) + +export const deleteSdtByIdResponse = zod.object({ + +}) + + +/** + * update SDT (Response may contain extra fields depending upon the type of SDT being updated) + * @summary update SDT (Response may contain extra fields depending upon the type of SDT being updated) + */ +export const updateSdtByIdParams = zod.object({ + "id": zod.string() +}) + +export const updateSdtByIdBody = zod.object({ + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + +export const updateSdtByIdResponse = zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +}) + + +/** + * add dashboard group + * @summary add dashboard group + */ +export const addDashboardGroupBody = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group') +}) + +export const addDashboardGroupResponse = zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "fullPath": zod.string().optional().describe('The full path of the dashboard group'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of groups directly under the Dashboard Group'), + "numOfDashboards": zod.number().optional().describe('The number of dashboards that belong to the Dashboard Group and any sub-groups'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "id": zod.number().optional().describe('The Id of the dashboard group '), + "dashboards": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "name": zod.string().optional().describe('The name of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "id": zod.number().optional().describe('The Id of the dashboard') +}).describe('The dashboards that belong to the group')).optional().describe('The dashboards that belong to the group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group'), + "numOfDirectDashboards": zod.number().optional().describe('The number of dashboards that belong directly to the Dashboard Group') +}) + + +/** + * get dashboard group list + * @summary get dashboard group list + */ +export const getDashboardGroupListQuerySizeDefault = 50;export const getDashboardGroupListQueryOffsetDefault = 0; + +export const getDashboardGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDashboardGroupListQuerySizeDefault), + "offset": zod.number().default(getDashboardGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDashboardGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard group'), + "fullPath": zod.string().optional().describe('The full path of the dashboard group'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('The tokens assigned at the group level'), + "name": zod.string().describe('The name of the dashboard group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of groups directly under the Dashboard Group'), + "numOfDashboards": zod.number().optional().describe('The number of dashboards that belong to the Dashboard Group and any sub-groups'), + "description": zod.string().optional().describe('This is a description of the dashboard group'), + "id": zod.number().optional().describe('The Id of the dashboard group '), + "dashboards": zod.array(zod.object({ + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "name": zod.string().optional().describe('The name of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "id": zod.number().optional().describe('The Id of the dashboard') +}).describe('The dashboards that belong to the group')).optional().describe('The dashboards that belong to the group'), + "parentId": zod.number().optional().describe('The Id of the parent dashboard group'), + "numOfDirectDashboards": zod.number().optional().describe('The number of dashboards that belong directly to the Dashboard Group') +})).optional() +}) + + +/** + * Update an existing netscan + * @summary Update a netscan + */ +export const patchNetscanParams = zod.object({ + "id": zod.number() +}) + +export const patchNetscanQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchNetscanBody = zod.object({ + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + +export const patchNetscanResponse = zod.object({ + "creator": zod.string().optional().describe('The user that created the policy'), + "collectorGroupName": zod.string().optional().describe('The name of the group of the Collector associated with this Netscan'), + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "collectorGroup": zod.number().optional().describe('The ID of the group of the Collector associated with this Netscan'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "nextStart": zod.string().optional().describe('The date and time of the next start time of the scan - displayed as manual if the scan does not run on a schedule'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "ignoreSystemIPsDuplicates": zod.boolean().optional().describe('Ignore system.ips when checking for duplicate resources'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "collectorDescription": zod.string().optional().describe('The description of the Collector associated with this Netscan'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nextStartEpoch": zod.number().optional().describe('The epoch of the next start time of the scan - displayed as 0 if the scan does not run on a schedule'), + "id": zod.number().optional().describe('The ID of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + + +/** + * Retrieve a specific netscan by its ID + * @summary Get netscan by ID + */ +export const getNetscanByIdParams = zod.object({ + "id": zod.number() +}) + +export const getNetscanByIdResponse = zod.object({ + "creator": zod.string().optional().describe('The user that created the policy'), + "collectorGroupName": zod.string().optional().describe('The name of the group of the Collector associated with this Netscan'), + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "collectorGroup": zod.number().optional().describe('The ID of the group of the Collector associated with this Netscan'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "nextStart": zod.string().optional().describe('The date and time of the next start time of the scan - displayed as manual if the scan does not run on a schedule'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "ignoreSystemIPsDuplicates": zod.boolean().optional().describe('Ignore system.ips when checking for duplicate resources'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "collectorDescription": zod.string().optional().describe('The description of the Collector associated with this Netscan'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nextStartEpoch": zod.number().optional().describe('The epoch of the next start time of the scan - displayed as 0 if the scan does not run on a schedule'), + "id": zod.number().optional().describe('The ID of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + + +/** + * Delete a specific netscan by its ID + * @summary Delete a netscan + */ +export const deleteNetscanByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteNetscanByIdResponse = zod.object({ + +}) + + +/** + * Update an existing netscan + * @summary Update a netscan + */ +export const updateNetscanParams = zod.object({ + "id": zod.number() +}) + +export const updateNetscanQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateNetscanBody = zod.object({ + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + +export const updateNetscanResponse = zod.object({ + "creator": zod.string().optional().describe('The user that created the policy'), + "collectorGroupName": zod.string().optional().describe('The name of the group of the Collector associated with this Netscan'), + "method": zod.string().describe('The method that should be used to discover devices. The values can be nmap (ICMP Ping)|nec2 (EC2)|enhancedScript|script'), + "collectorGroup": zod.number().optional().describe('The ID of the group of the Collector associated with this Netscan'), + "description": zod.string().optional().describe('The description of the Netscan Policy'), + "nextStart": zod.string().optional().describe('The date and time of the next start time of the scan - displayed as manual if the scan does not run on a schedule'), + "duplicate": zod.object({ + "collectors": zod.array(zod.string().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4')).optional().describe('The collectors for which monitored devices should be used to identify and exclude duplicate IPs, if duplicate type is 4'), + "groups": zod.array(zod.string().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3')).optional().describe('The groups for which devices should be used to identify and exclude duplicate IPs, if duplicate type is 3'), + "type": zod.number().optional().describe('The types of duplicate IPs that should be excluded. The values can be 1|2|3|4 which denotes\n1: matching any monitored devices\n2: matching devices already discovered by this scan\n3: matching devices in these groups\n4: matching devices assigned to these collectors\n') +}).describe('Information that determines how duplicate discovered devices should be handled'), + "version": zod.number().optional().describe('The Id of the device'), + "collector": zod.number().optional().describe('The ID of the Collector associated with this Netscan'), + "ignoreSystemIPsDuplicates": zod.boolean().optional().describe('Ignore system.ips when checking for duplicate resources'), + "schedule": zod.object({ + "cron": zod.string().optional().describe('The cron schedule for when the scan should be run'), + "recipients": zod.array(zod.string().describe('The recipients that should receive the notification of the scan finish')).optional().describe('The recipients that should receive the notification of the scan finish'), + "timezone": zod.string().optional().describe('The timezone for the schedule'), + "type": zod.string().optional().describe('The type of schedule. The values can be manual (no schedule)|hourly|daily|weekly|monthly'), + "notify": zod.boolean().optional().describe('Whether or not an email should be sent when the scan finishes') +}).describe('Information related to the recurring execution schedule for the Netscan Policy'), + "collectorDescription": zod.string().optional().describe('The description of the Collector associated with this Netscan'), + "name": zod.string().describe('The name of the Netscan Policy'), + "nextStartEpoch": zod.number().optional().describe('The epoch of the next start time of the scan - displayed as 0 if the scan does not run on a schedule'), + "id": zod.number().optional().describe('The ID of the Netscan Policy'), + "nsgId": zod.number().optional().describe('The ID of the group the policy belongs to'), + "group": zod.string().optional().describe('The group the Netscan policy should belong to') +}) + + +/** + * Retrieves a recommendation by its ID + * @summary Get recommendation by ID + */ +export const getRecommendationByIdParams = zod.object({ + "id": zod.string().describe('an alphanumeric identifier composed of the recommendation\'s database ID, the associated resource ID, and the recommendation type, delimited with hyphens, e.g. 123-456-EBS_UNATTACHED') +}) + +export const getRecommendationByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getRecommendationByIdResponse = zod.object({ + "resourceDisplayName": zod.string().optional().describe('Display name of the resource associated with the recommendation'), + "resourceId": zod.number().optional().describe('ID of the resource associated with the recommendation'), + "providerConsoleUrl": zod.string().optional().describe('URL to the resource in the cloud provider\'s console'), + "annualSavings": zod.number().optional().describe('Potential annual cost savings in USD'), + "recommendationCategory": zod.string().optional().describe('Recommendation category'), + "createdAtMS": zod.number().optional().describe('Date when the recommendation was generated, in epoch milliseconds'), + "criteria": zod.string().optional().describe('Criteria for the recommendation'), + "cloudAccountId": zod.string().optional().describe('ID of the cloud account associated with the recommendation'), + "deviceSubtype": zod.string().optional().describe('Device subtype associated with the recommendation'), + "recommendation": zod.string().optional().describe('Recommendation details'), + "recommendationId": zod.number().optional().describe('Unique numerical identifier for the recommendation'), + "recommendationStatus": zod.string().optional().describe('Status of the recommendation'), + "updatedAtMS": zod.number().optional().describe('Date when the recommendation was last updated, in epoch milliseconds'), + "cloudProvider": zod.string().optional().describe('Cloud provider type associated with the recommendation'), + "cloudServiceType": zod.string().optional().describe('Cloud service type associated with the recommendation'), + "id": zod.string().optional().describe('Unique identifier for the recommendation, including the recommendation category') +}) + + +/** + * Create a access group + * @summary Create a access group + */ +export const addAccessGroupBody = zod.object({ + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group') +}).describe('Module\'s access groups') + +export const addAccessGroupResponse = zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups') + + +/** + * Verify the billing permissions of an AWS account + * @summary Verify AWS Billing Permissions + */ +export const verifyAWSBillingPermissionsBody = zod.object({ + "accessId": zod.string().optional(), + "isBillingAcceptOptInWarnings": zod.boolean().optional(), + "accountId": zod.string().optional(), + "newBillingBucket": zod.string().optional(), + "assumedRoleArn": zod.string().optional(), + "bucketNameForBillingFiles": zod.string().optional(), + "accessKey": zod.string().optional(), + "checkedServices": zod.string().optional(), + "groupId": zod.number().optional(), + "newBillingPath": zod.string().optional(), + "externalId": zod.string().optional() +}) + +export const verifyAWSBillingPermissionsResponse = zod.object({ + "optInWarnings": zod.record(zod.string(), zod.string()).optional(), + "isValid": zod.boolean().optional(), + "permissionErrors": zod.array(zod.string()).optional(), + "nonPermissionErrors": zod.array(zod.string()).optional() +}) + + +/** + * add user + * @summary add user + */ +export const addAdminBody = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + +export const addAdminResponse = zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "lastLoginOn": zod.number().optional().describe('The time that the user last logged in, in epoch format'), + "lastActionOnLocal": zod.string().optional().describe('The time, in local format, of the user\'s last action'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "lastAuthIp": zod.string().optional().describe('The Last User IP'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "lastAction": zod.string().optional().describe('The last action taken by the user'), + "trainingEmail": zod.string().optional().describe('The email address for user\'s Training account'), + "lastActionOn": zod.number().optional().describe('The time, in epoch format, of the user\'s last action'), + "lastAccessOn": zod.number().optional().describe('The time that the user last accessed the portal'), + "id": zod.number().optional().describe('The Id of the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "acceptEULAOn": zod.number().optional().describe('The time, in epoch format, that the user accepted the EULA (if required to)'), + "immediateForceLogout": zod.boolean().optional().describe('Specifies whether the user need to be logged off, if Force Password Change is enabled. The values can be true|false'), + "userPermission": zod.string().optional().describe('The permission of current user with the admin. values can be write|read|none'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "tenantId": zod.number().optional().describe('The tenant id of the user'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "userType": zod.string().optional().describe('The type of user'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +}) + + +/** + * get user list + * @summary get user list + */ +export const getAdminListQuerySizeDefault = 50;export const getAdminListQueryOffsetDefault = 0; + +export const getAdminListQueryParams = zod.object({ + "type": zod.string().optional(), + "permission": zod.string().optional(), + "filterGroupString": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getAdminListQuerySizeDefault), + "offset": zod.number().default(getAdminListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAdminListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "lastName": zod.string().optional().describe('The last name associated with the user'), + "note": zod.string().optional().describe('Any notes assocaited with the user'), + "viewPermission": zod.object({ + +}).optional().describe('The account tabs that will be visible to the user'), + "timezone": zod.string().optional().describe('The timezone of the user'), + "roles": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).describe('The roles assigned to the user'), + "lastLoginOn": zod.number().optional().describe('The time that the user last logged in, in epoch format'), + "lastActionOnLocal": zod.string().optional().describe('The time, in local format, of the user\'s last action'), + "smsEmailFormat": zod.string().optional().describe('The values can be sms | fullText, where sms = 160 characters and fullText = all characters'), + "apionly": zod.boolean().optional().describe('Specifies whether the user is an API only user. The values can be true|false'), + "lastAuthIp": zod.string().optional().describe('The Last User IP'), + "apiTokens": zod.array(zod.object({ + "note": zod.string().optional().describe('The note associated with the API Tokens'), + "lastUsedOn": zod.number().optional().describe('The epoch at which the API Tokens were last used'), + "userPermission": zod.string().optional().describe('The permission of current apiToken with the admin. The values can be write|read|none'), + "roles": zod.array(zod.string().describe('The roles assigned to the user that is associated with the API Tokens')).optional().describe('The roles assigned to the user that is associated with the API Tokens'), + "createdOn": zod.number().optional().describe('The epoch at which the API Tokens were created'), + "accessId": zod.string().optional().describe('The access Id associated with the API Tokens'), + "adminName": zod.string().optional().describe('The name of the user associated with the API Tokens'), + "lastAuthIp": zod.string().optional().describe('The IP from which the API Tokens were last used'), + "accessKey": zod.string().optional().describe('The secret key associated with the API Tokens'), + "createdBy": zod.string().optional().describe('The user who is the API Tokens created by'), + "adminId": zod.number().optional().describe('The id of the user associated with the API Tokens'), + "id": zod.number().optional().describe('The id of the API Token'), + "status": zod.number().optional().describe('The values can be 1 | 2. Specifies whether or not the API Tokens are enabled, where 2 = enabled') +}).describe('Any API Tokens associated with the user')).optional().describe('Any API Tokens associated with the user'), + "adminGroupIds": zod.array(zod.number().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated')).optional().describe('The Id(s) of the groups the admin is in, where multiple group ids are comma separated'), + "password": zod.string().optional().describe('The password associated with the user'), + "lastAction": zod.string().optional().describe('The last action taken by the user'), + "trainingEmail": zod.string().optional().describe('The email address for user\'s Training account'), + "lastActionOn": zod.number().optional().describe('The time, in epoch format, of the user\'s last action'), + "lastAccessOn": zod.number().optional().describe('The time that the user last accessed the portal'), + "id": zod.number().optional().describe('The Id of the user'), + "email": zod.string().describe('The email address associated with the user'), + "contactMethod": zod.string().optional().describe('The values can be email | smsemail. Specifies the contact method for this admin'), + "acceptEULAOn": zod.number().optional().describe('The time, in epoch format, that the user accepted the EULA (if required to)'), + "immediateForceLogout": zod.boolean().optional().describe('Specifies whether the user need to be logged off, if Force Password Change is enabled. The values can be true|false'), + "userPermission": zod.string().optional().describe('The permission of current user with the admin. values can be write|read|none'), + "smsEmail": zod.string().optional().describe('The sms email address associated with the user'), + "twoFAEnabled": zod.boolean().optional().describe('Whether or not two factor authentication is enabled for the user'), + "firstName": zod.string().optional().describe('The first name associated with the user'), + "phone": zod.string().optional().describe('The phone number associated with the user'), + "createdBy": zod.string().optional().describe('Species who created the user. This may be another user, SAML or LogicMonitor'), + "forcePasswordChange": zod.boolean().optional().describe('Whether or not the user should be forced to change their password on the next login'), + "tenantId": zod.number().optional().describe('The tenant id of the user'), + "acceptEULA": zod.boolean().optional().describe('Whether or not the user is required to accept the EULA (end user license agreement)'), + "userType": zod.string().optional().describe('The type of user'), + "username": zod.string().describe('The username associated with the user'), + "status": zod.string().optional().describe('The user\'s status. The values can be active|suspended') +})).optional() +}) + + +/** + * ack collector down alert + * @summary ack collector down alert + */ +export const ackCollectorDownAlertByIdParams = zod.object({ + "id": zod.number() +}) + +export const ackCollectorDownAlertByIdBody = zod.object({ + "comment": zod.string().optional() +}) + +export const ackCollectorDownAlertByIdResponse = zod.object({ + +}) + + +/** + * get widget list by DashboardId + * @summary get widget list by DashboardId + */ +export const getWidgetListByDashboardIdParams = zod.object({ + "id": zod.number() +}) + +export const getWidgetListByDashboardIdQuerySizeDefault = 50;export const getWidgetListByDashboardIdQueryOffsetDefault = 0; + +export const getWidgetListByDashboardIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getWidgetListByDashboardIdQuerySizeDefault), + "offset": zod.number().default(getWidgetListByDashboardIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWidgetListByDashboardIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "lastUpdatedBy": zod.string().optional().describe('The user that last updated the widget'), + "userPermission": zod.string().optional().describe('The permission level of the user who last modified the widget'), + "supportCustomProperty": zod.boolean().optional(), + "description": zod.string().optional().describe('The description of the widget'), + "type": zod.string().describe('alert | batchjob | flash | gmap | ngraph | ograph | cgraph | sgraph | netflowgraph | groupNetflowGraph | netflow | groupNetflow | html | bigNumber | gauge | pieChart | table | dynamicTable | deviceSLA | text | statsd | deviceStatus | serviceAlert | noc | websiteOverview | websiteOverallStatus | websiteIndividualStatus | websiteSLA | savedMap'), + "dashboardId": zod.number().describe('The id of the dashboard the widget belongs to'), + "isSupportCustomProperty": zod.boolean().optional().describe('Custom property support in table widget or not'), + "name": zod.string().describe('The name of the widget'), + "lastUpdatedOn": zod.number().optional().describe('The time that corresponds to when the widget was last updated, in epoch format'), + "theme": zod.string().optional().describe('The color scheme of the widget. Options are: borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue'), + "interval": zod.number().optional().describe('The refresh interval of the widget, in minutes'), + "id": zod.number().optional().describe('The Id of the widget'), + "timescale": zod.string().optional().describe('The default timescale of the widget') +})).optional() +}) + + +/** + * get netflow ports + * @summary get netflow ports + */ +export const getNetflowPortListParams = zod.object({ + "id": zod.number() +}) + +export const getNetflowPortListQuerySizeDefault = 50;export const getNetflowPortListQueryOffsetDefault = 0; + +export const getNetflowPortListQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "ip": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getNetflowPortListQuerySizeDefault), + "offset": zod.number().default(getNetflowPortListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getNetflowPortListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "percentUsage": zod.number().optional(), + "port": zod.number().optional(), + "dataType": zod.string().optional(), + "usage": zod.number().optional(), + "description": zod.string().optional() +})).optional() +}) + + +/** + * get a list of SDTs for a website + * @summary get a list of SDTs for a website + */ +export const getWebsiteSDTListByWebsiteIdParams = zod.object({ + "id": zod.number() +}) + +export const getWebsiteSDTListByWebsiteIdQuerySizeDefault = 50;export const getWebsiteSDTListByWebsiteIdQueryOffsetDefault = 0; + +export const getWebsiteSDTListByWebsiteIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getWebsiteSDTListByWebsiteIdQuerySizeDefault), + "offset": zod.number().default(getWebsiteSDTListByWebsiteIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWebsiteSDTListByWebsiteIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +})).optional() +}) + + +/** + * Retrieve the list of log retentions + * @summary Retrieve the list of log retentions + */ +export const getRetentionListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "isMin": zod.boolean().optional(), + "items": zod.array(zod.object({ + +})).optional() +}) + + +/** + * collect a config for a device + * @summary collect a config for a device + */ +export const collectDeviceConfigSourceConfigParams = zod.object({ + "instanceId": zod.number(), + "deviceId": zod.number(), + "hdsId": zod.number() +}) + +export const collectDeviceConfigSourceConfigResponse = zod.object({ + +}) + + +/** + * update device group datasource + * @summary update device group datasource + */ +export const patchDeviceGroupDatasourceByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const patchDeviceGroupDatasourceByIdBody = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource') +}) + +export const patchDeviceGroupDatasourceByIdResponse = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource'), + "dataSourceId": zod.number().optional().describe('The ID of the DataSource'), + "dataSourceGroupName": zod.string().optional().describe('The DataSource Group name'), + "deviceGroupId": zod.number().optional().describe('The ID of the Device Group for the DataSource'), + "dataSourceDisplayName": zod.string().optional().describe('The Display Name of the DataSource'), + "disableAlerting": zod.boolean().optional().describe('Boolean flag for enabling/disabling alerting for DataSource'), + "dataSourceName": zod.string().optional().describe('The Name of the DataSource'), + "dataSourceType": zod.string().optional().describe('The Type of the DataSource') +}) + + +/** + * get device group datasource + * @summary get device group datasource + */ +export const getDeviceGroupDatasourceByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const getDeviceGroupDatasourceByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceGroupDatasourceByIdResponse = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource'), + "dataSourceId": zod.number().optional().describe('The ID of the DataSource'), + "dataSourceGroupName": zod.string().optional().describe('The DataSource Group name'), + "deviceGroupId": zod.number().optional().describe('The ID of the Device Group for the DataSource'), + "dataSourceDisplayName": zod.string().optional().describe('The Display Name of the DataSource'), + "disableAlerting": zod.boolean().optional().describe('Boolean flag for enabling/disabling alerting for DataSource'), + "dataSourceName": zod.string().optional().describe('The Name of the DataSource'), + "dataSourceType": zod.string().optional().describe('The Type of the DataSource') +}) + + +/** + * update device group datasource + * @summary update device group datasource + */ +export const updateDeviceGroupDatasourceByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const updateDeviceGroupDatasourceByIdBody = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource') +}) + +export const updateDeviceGroupDatasourceByIdResponse = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('Boolean flag for enabling/disabling monitoring of DataSource'), + "dataSourceId": zod.number().optional().describe('The ID of the DataSource'), + "dataSourceGroupName": zod.string().optional().describe('The DataSource Group name'), + "deviceGroupId": zod.number().optional().describe('The ID of the Device Group for the DataSource'), + "dataSourceDisplayName": zod.string().optional().describe('The Display Name of the DataSource'), + "disableAlerting": zod.boolean().optional().describe('Boolean flag for enabling/disabling alerting for DataSource'), + "dataSourceName": zod.string().optional().describe('The Name of the DataSource'), + "dataSourceType": zod.string().optional().describe('The Type of the DataSource') +}) + + +/** + * Create a new config source + * @summary Add a new config source + */ +export const addConfigSourceBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + +export const addConfigSourceResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Retrieve a list of config sources + * @summary Get config source list + */ +export const getConfigSourceListQuerySizeDefault = 50;export const getConfigSourceListQueryOffsetDefault = 0; + +export const getConfigSourceListQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getConfigSourceListQuerySizeDefault), + "offset": zod.number().default(getConfigSourceListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getConfigSourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +})).optional() +}) + + +/** + * get device instance data + * @summary get device instance data + */ +export const getDeviceDatasourceInstanceDataParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const getDeviceDatasourceInstanceDataQueryParams = zod.object({ + "period": zod.number().optional(), + "start": zod.number().optional(), + "end": zod.number().optional(), + "datapoints": zod.string().optional(), + "format": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceDataResponse = zod.object({ + "values": zod.array(zod.array(zod.number().describe('Datapoint values 2-D list')).describe('Datapoint values 2-D list')).optional().describe('Datapoint values 2-D list'), + "time": zod.array(zod.number().describe('Timestamp list')).optional().describe('Timestamp list'), + "nextPageParams": zod.string().optional().describe('The next page parameters'), + "dataSourceName": zod.string().optional().describe('Datasource name') +}) + + +/** + * get device group SDTs + * @summary get device group SDTs + */ +export const getDeviceGroupSDTListParams = zod.object({ + "id": zod.number() +}) + +export const getDeviceGroupSDTListQuerySizeDefault = 50;export const getDeviceGroupSDTListQueryOffsetDefault = 0; + +export const getDeviceGroupSDTListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDeviceGroupSDTListQuerySizeDefault), + "offset": zod.number().default(getDeviceGroupSDTListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDeviceGroupSDTListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +})).optional() +}) + + +/** + * Update cluster alert configuration + * @summary Update cluster alert configuration + */ +export const patchDeviceGroupClusterAlertConfByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const patchDeviceGroupClusterAlertConfByIdBody = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + +export const patchDeviceGroupClusterAlertConfByIdResponse = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataPointName": zod.string().optional().describe('The name of the dataPoint you want to base the cluster alert on'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "dataPointId": zod.number().optional().describe('The id of the dataPoint you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "id": zod.number().optional().describe('The id of the cluster alert configuration'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "dataPointDescription": zod.string().optional().describe('The description of the dataPoint you want to base the cluster alert on'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + + +/** + * Get cluster alert configuration by id + * @summary Get cluster alert configuration by id + */ +export const getDeviceGroupClusterAlertConfByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const getDeviceGroupClusterAlertConfByIdResponse = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataPointName": zod.string().optional().describe('The name of the dataPoint you want to base the cluster alert on'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "dataPointId": zod.number().optional().describe('The id of the dataPoint you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "id": zod.number().optional().describe('The id of the cluster alert configuration'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "dataPointDescription": zod.string().optional().describe('The description of the dataPoint you want to base the cluster alert on'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + + +/** + * Delete cluster alert configuration + * @summary Delete cluster alert configuration + */ +export const deleteDeviceGroupClusterAlertConfByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const deleteDeviceGroupClusterAlertConfByIdResponse = zod.object({ + +}) + + +/** + * Update cluster alert configuration + * @summary Update cluster alert configuration + */ +export const updateDeviceGroupClusterAlertConfByIdParams = zod.object({ + "deviceGroupId": zod.number(), + "id": zod.number() +}) + +export const updateDeviceGroupClusterAlertConfByIdBody = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + +export const updateDeviceGroupClusterAlertConfByIdResponse = zod.object({ + "countBy": zod.string().optional().describe('host | instance - Whether the cluster alert is based on an alert count across devices or instances'), + "dataPointName": zod.string().optional().describe('The name of the dataPoint you want to base the cluster alert on'), + "dataSourceId": zod.number().optional().describe('The id of the dataSource you want to base the cluster alert on'), + "dataPointId": zod.number().optional().describe('The id of the dataPoint you want to base the cluster alert on'), + "minAlertLevel": zod.number().optional().describe('The alert level that must be present for the devices or instances to trigger the cluster alert. Acceptable values are: 2, 3, 4'), + "dataSourceDisplayName": zod.string().optional().describe('The display name of the dataSource you want to base the cluster alert on'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting will be disabled'), + "id": zod.number().optional().describe('The id of the cluster alert configuration'), + "suppressIndAlert": zod.boolean().optional().describe('Whether or not alerting will be suppressed for individual alerts, the default value is true'), + "thresholdType": zod.string().optional().describe('whether the alert expression should be evaluated as a total number of devices or instances (absolute) or as a percentage of devices or instances (percentage). Acceptable values are: absolute, percentage'), + "dataPointDescription": zod.string().optional().describe('The description of the dataPoint you want to base the cluster alert on'), + "alertExpr": zod.string().optional().describe('The expression that indicates the number of objects (devices or instances) that need to be in alert to trigger the cluster alert. E.g. > 5') +}) + + +/** + * get device group alerts + * @summary get device group alerts + */ +export const getAlertListByDeviceGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getAlertListByDeviceGroupIdQuerySizeDefault = 50;export const getAlertListByDeviceGroupIdQueryOffsetDefault = 0; + +export const getAlertListByDeviceGroupIdQueryParams = zod.object({ + "needMessage": zod.boolean().optional(), + "customColumns": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getAlertListByDeviceGroupIdQuerySizeDefault), + "offset": zod.number().default(getAlertListByDeviceGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAlertListByDeviceGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "sdtIds": zod.string().optional().describe('The SDT Ids associated with the alert'), + "resourceId": zod.number().optional().describe('The device specific LogicModule Id'), + "endEpoch": zod.number().optional().describe('The time (in epoch format) that the alert ended'), + "threshold": zod.string().optional().describe('The threshold associated with the object in alert'), + "type": zod.string().optional().describe('The type of alert'), + "startEpoch": zod.number().optional().describe('The time (in epoch format) that the alert started'), + "enableAnomalyAlertGeneration": zod.string().optional().describe('Indicates dynamic threshold alert generation setting. Expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "internalId": zod.string().optional().describe('The internal id for the alert'), + "monitorObjectName": zod.string().optional().describe('The name of the object that the alert is associated with'), + "dataPointName": zod.string().optional().describe('The name of the datapoint in alert'), + "dataPointId": zod.number().optional().describe('The id of the datapoint in alert'), + "suppressor": zod.string().optional().describe('The component (For example: SDT, HostClusterAlert) which suppressed the alert'), + "context": zod.object({ + "activeOnly": zod.boolean().optional(), + "anomaly": zod.string().optional(), + "pivotType": zod.string().optional(), + "suppressorFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "forServices": zod.boolean().optional(), + "refreshActiveAlertCache": zod.boolean().optional(), + "pivotDimensions": zod.array(zod.string()).optional(), + "dependencyRoutingStateFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "excludePhatomFlag": zod.boolean().optional(), + "dependencyRoleFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "pivotDimensionESField": zod.array(zod.string()).optional(), + "lmconfigEnabled": zod.boolean().optional(), + "dependencyRoutingStateFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "dependencyRoleFilters": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "clearedOnly": zod.boolean().optional(), + "suppressorFiltersV4": zod.array(zod.object({ + "fieldName": zod.string().optional(), + "supportGlob": zod.boolean().optional(), + "values": zod.array(zod.string()).optional(), + "operator": zod.string().optional() +})).optional(), + "alertsById": zod.object({ + "resourceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "eventSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "clusterAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "datapoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "escalationChains": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "sdts": zod.record(zod.string(), zod.object({ + "notes": zod.string().optional().describe('Notes regarding the SDT'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "dataSourceId": zod.number().optional().describe('The id of the datasource instance that the SDT will be associated with'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "endedAtMS": zod.number().optional().describe('The time milliseconds that the SDT will end or has ended.'), + "resourceGroupId": zod.number().optional(), + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT'), + "identifier": zod.object({ + "model": zod.enum(['accessLogs', 'accessGroups', 'adminNotifications', 'aggregateSavings', 'alerts', 'visualizationAggregateEntry', 'visualizationAggregateValue', 'alertDependencyRules', 'alertRoutings', 'alertRules', 'diagnosticRules', 'alertTuningConfigAncestry', 'alertTuningConfigs', 'alertTuningConfigsHistory', 'alertTuningConfigSlots', 'alertTuningGraphs', 'alertsTuningSeries', 'asnMappings', 'billingConfigurations', 'cloudAccounts', 'cloudResourceProperty', 'clusterAlertRoutings', 'clusterAlertTuningConfigs', 'collectors', 'collectorEvents', 'collectorGroups', 'collectorStatus', 'collectorUpgradeHistory', 'collectorUpgradeInfo', 'configSources', 'collectorLogs', 'config', 'configAlert', 'correlationGraphs', 'dashboards', 'datapoints', 'dataQueries', 'dataSources', 'dataSourceInstances', 'dataSourceInstanceAlertSettings', 'dataSourceInstanceGroups', 'datasets', 'dnsMappings', 'escalationChains', 'eventSources', 'integrations', 'integrationAuditLogs', 'logSources', 'exchangeAccessGroups', 'exchangeActiveDiscoveryFilters', 'exchangeAppliesToFunctions', 'exchangeChangelogs', 'exchangeConfigSources', 'exchangeConfigSourceConfigChecks', 'exchangeDataSources', 'exchangeDataSourceDataPoints', 'exchangeDataSourceDataPointDisplayStatusNames', 'exchangeDataSourceGraphs', 'exchangeDataSourceGraphSeries', 'exchangeDataSourceGraphVirtualSeries', 'exchangeDataSourceOverviewGraphs', 'exchangeDataSourceOverviewGraphSeries', 'exchangeDataSourceOverviewGraphVirtualSeries', 'exchangeDiagnosticSources', 'exchangeEventSources', 'exchangeEventSourceFilters', 'exchangeEventSourceLogFiles', 'exchangeJobMonitors', 'exchangeLogSources', 'exchangeLogSourceFilters', 'exchangeSnmpTrapLogSourceFilters', 'exchangeLogSourceLogFields', 'exchangeLogSourceResourceMappings', 'exchangeLogSourceCollectorMappings', 'exchangeLogicModules', 'exchangeLogicModulePackages', 'exchangeLogicModulePermissions', 'exchangePackagedLogicModules', 'exchangePropertySources', 'exchangeSNMPSysOIDMaps', 'exchangeTopologySources', 'externalResourceIdentifiers', 'failedDataSourceInfo', 'filterFieldList', 'graphs', 'graphMeta', 'healthMetrics', 'hierarchy', 'hostclusterAlertDefs', 'hostDiagnosticSourceDetails', 'diagnosticExecutionContext', 'latestDiagnosticExecutionResultContext', 'diagnosticExecutionSearchContext', 'diagnosticSourceAssociatedDevices', 'hostGroups', 'internalAlertSettings', 'jobMonitors', 'jobMonitorExecutions', 'lmSupportAccessHasConnection', 'lmSupportAccessState', 'lmotelCollectors', 'lmotelCollectorVersions', 'lmCollectorVersions', 'logalerts', 'logicModuleGroups', 'logpipelinesources', 'logpipelineprocessors', 'matchedEvents', 'metaGroupings', 'metricsCorrelation', 'monitoredResources', 'netscanGroups', 'netscans', 'netflow', 'netflowAlertRule', 'allLevels', 'nocWidgets', 'normalizedProperties', 'netscanPolicies', 'netscanExecutions', 'opsNotes', 'opsNoteResourceScopes', 'opsNoteServiceScopes', 'opsNoteResourceGroupScopes', 'opsNoteServiceGroupScopes', 'opsNoteGroupAllScopes', 'opsNoteTags', 'orgTreeNodes', 'portMappings', 'productIds', 'properties', 'propertySources', 'rawData', 'recentlyDeletedItems', 'recipientGroups', 'cloudRecommendations', 'cloudRecommendationAdditionalData', 'recommendationTypes', 'relationships', 'reports', 'reportHistories', 'reportGroups', 'resources', 'resourceDashboards', 'resourceDataSources', 'resourceDatapoints', 'resourceEventSources', 'resourceConfigSources', 'ConfigSourcesGoldStandard', 'ConfigSourceConfiguration', 'resourceDashboardTemplates', 'resourceGroups', 'resourceGroupDataSourceConfigs', 'resourceGroupEventSourceConfigs', 'resourceGroupInfoSourceConfigs', 'resourceJobMonitors', 'resourceLogPipelineResources', 'resourceLogSources', 'sdts', 'services', 'serviceCheckpoints', 'serviceGroups', 'sharedQueries', 'siteMonitors', 'slaWidgets', 'spanCount', 'securityRecommendations', 'subscriptions', 'topology', 'topologyMaps', 'topologyMapsHistogram', 'topologyMapsGraphs', 'subEntities', 'subEntitiesDetails', 'topologySavedMapsGroupType', 'topologySavedMapsGroup', 'topologyManualMapping', 'topologyManualInterfaceList', 'traffic', 'treeNodes', 'unmonitoredResources', 'userdata', 'users', 'userSettings', 'websiteCheckpoints', 'websiteGroups', 'websites', 'ServicePreview', 'BizServiceDatapoint', 'ServiceTemplateView', 'ServiceMemberPreview', 'RestServiceTemplate', 'ServiceTemplateServiceStats', 'synthetics', 'usage', 'tracesDevicesNamesIds', 'tracesGraphIds', 'tracesServices', 'tracesDeviceDatasources', 'tracesDeviceDatasourceInstances', 'tracesNamespaceGraphDetails', 'tracesResourceNamesIds', 'tracesTopologyEdgeData', 'members', 'apiTokens', 'roleGroups', 'roles', 'userGroups', 'sharingTokens', 'syntheticsDSInstanceRawData', 'syntheticsDSInstanceStepData', 'syntheticsDSInstanceAlerts', 'usageDimensions', 'vizResourceInfo', 'lmqlResult', 'lmqlParsed', 'partitions', 'logPartitionChangelog', 'cloudRecommendationStatus', 'recommendationStatusUpdateRequest', 'websiteDevice', 'mibUpload', 'logQueryGroups', 'logQueryGroupChangelog', 'logQuery', 'trackingLogQueries']).optional(), + "id": zod.string().optional() +}).optional(), + "targetId": zod.object({ + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +}).optional().describe('SDT target'), + "deviceDataSourceId": zod.number().optional().describe('The id of the device datasource instance group that the SDT will be associated with'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "intoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "websiteGroupId": zod.number().describe('The Id of the service group that the SDT applies to'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "recurrence": zod.string().describe('Describes how and when the SDT recures'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "relatedIntoRestResponse": zod.object({ + "diagnostics": zod.object({ + +}).optional(), + "data": zod.object({ + +}).optional(), + "successes": zod.object({ + +}).optional(), + "meta": zod.object({ + "filteredCount": zod.number().optional(), + "fromPagingResponseInfo": zod.unknown().optional(), + "fromSortInfo": zod.unknown().optional(), + "perPageCount": zod.number().optional(), + "sort": zod.string().optional(), + "totalCount": zod.number().optional(), + "pageOffsetCount": zod.number().optional() +}).optional(), + "warnings": zod.object({ + +}).optional(), + "errors": zod.object({ + +}).optional() +}).optional(), + "createdBy": zod.string().optional().describe('SDT creator\'s username'), + "startedAtMS": zod.number().optional().describe('The time in milliseconds that the SDT will start or has started') +})).optional(), + "alertRules": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceGroups": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "resources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logpipelinesources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "services": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstances": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "alerts": zod.record(zod.string(), zod.unknown()).optional(), + "logalerts": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "batchJobs": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSourceInstanceAlertSettings": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "serviceCheckpoints": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "logAlertsMap": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional(), + "dataSources": zod.record(zod.string(), zod.object({ + "deleted": zod.boolean().optional(), + "isDeleted": zod.boolean().optional(), + "displayName": zod.string().optional(), + "name": zod.string().optional(), + "namespace": zod.string().optional(), + "model": zod.string().optional(), + "id": zod.string().optional() +})).optional() +}).optional() +}).optional(), + "id": zod.string().optional().describe('The alert id'), + "detailMessage": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "ruleId": zod.number().optional().describe('The id of the rule the alert matches'), + "alertExternalTicketUrl": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "tenant": zod.string().optional().describe('Tenant to which this alert belongs to. '), + "alertValue": zod.string().optional().describe('The value that triggered the alert'), + "sdted": zod.object({ + +}).optional().describe('It specifies if the SDT is set for an active alert or not. However, the sdted is set to false for cleared alert as you cannot apply SDT to a cleared alert.'), + "SDT": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Indicates anomaly detection alert suppression setting, expression is comma separated\n0 denotes OFF, 1 denotes ON, -1 denotes INVALID\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "receivedList": zod.string().optional().describe('The recipients that have received the alert'), + "monitorObjectGroups": zod.object({ + +}).optional().describe('Information about the groups the object is a member of'), + "chainId": zod.number().optional().describe('The id of the escalation chain the alert was routed to'), + "resourceTemplateId": zod.number().optional().describe('The id of the datasource in alert'), + "lastUpdatedOnEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was last updated. This field is used to track the most recent update to the alert, such as changes in its state, acknowledgment, or other properties'), + "cleared": zod.boolean().optional().describe('Whether or not the alert has cleared'), + "adAlertDesc": zod.string().optional().describe('The description for dynamic threshold based alert'), + "resourceTemplateName": zod.string().optional().describe('The name of the datasource in alert'), + "anomaly": zod.boolean().optional().describe('Indicates the anomaly alert, value can be true/false/null. If alert value lies within confidence band then false, otherwise true. If confidence band is not available then value will be null.'), + "instanceName": zod.string().optional().describe('The name of the instance in alert'), + "monitorObjectId": zod.number().optional().describe('The id of the object that the alert is associated with'), + "rule": zod.string().optional().describe('The rule the alert matches'), + "ackComment": zod.string().optional().describe('The comment submitted with the acknowledgement'), + "alertGroupEntityValue": zod.string().optional().describe('Alert group entity value for stateful log alerts'), + "instanceId": zod.number().optional().describe('The id of the instance in alert'), + "suppressDesc": zod.string().optional().describe('The description for suppressed alert'), + "logPartition": zod.string().optional().describe('Specified log alert partition information'), + "nextRecipient": zod.number().optional().describe('The next recipient in the escalation chain for this alert'), + "clearExpr": zod.string().optional().describe('Specified log alert clear expression information'), + "adAlert": zod.boolean().optional().describe('Specifies whether alert is dynamic threshold based or not'), + "ackedBy": zod.string().optional().describe('The user that acknowledged the alert'), + "severity": zod.number().optional().describe('The alert severity, where 2=warning, 3=error and 4=critical'), + "ackedEpoch": zod.number().optional().describe('The time (in epoch format) that the alert was acknowledged'), + "chain": zod.string().optional().describe('The escalation chain the alert was routed to'), + "alertQuery": zod.string().optional().describe('Specified alert query information'), + "subChainId": zod.number().optional().describe('The id of the sub time based chain'), + "logMetaData": zod.string().optional().describe('Specified log alert metadata fields value'), + "monitorObjectType": zod.string().optional(), + "sessionId": zod.number().optional().describe('The session id of alert'), + "acked": zod.boolean().optional().describe('Whether or not the alert has been acknowledged'), + "resourceTemplateType": zod.string().optional().describe('The type of the logicmodule in alert'), + "clearValue": zod.string().optional().describe('The value that cleared the alert'), + "instanceDescription": zod.string().optional().describe('The description of the instance in alert'), + "dependencyRoutingState": zod.string().optional().describe('The dependency routing state'), + "dependencyRole": zod.string().optional().describe('The dependency role') +})).optional() +}) + + +/** + * get widget data (Based upon widget type the response may contain additional attributes. Please refer models corresponding to specific widget type at the bottom of this page to check the attributes) + * @summary get widget data (Based upon widget type the response may contain additional attributes. Please refer models corresponding to specific widget type at the bottom of this page to check the attributes) + */ +export const getWidgetDataByIdParams = zod.object({ + "id": zod.number() +}) + +export const getWidgetDataByIdQueryParams = zod.object({ + "end": zod.number().optional(), + "format": zod.string().optional(), + "start": zod.number().optional() +}) + +export const getWidgetDataByIdResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}) + + +/** + * get website data by graph name + * @summary get website data by graph name + */ +export const getWebsiteDataByGraphNameParams = zod.object({ + "id": zod.number(), + "graphName": zod.string() +}) + +export const getWebsiteDataByGraphNameQueryParams = zod.object({ + "start": zod.number().optional(), + "end": zod.number().optional(), + "format": zod.string().optional() +}) + +export const getWebsiteDataByGraphNameResponse = zod.object({ + "type": zod.string().optional().describe('The widget data type. The values can be noc|alert|batchjob|gmap|netflow|netflowGroup|bigNumber|serviceNOC|gauge|pieChart|table|deviceNOC|deviceSLA|serviceSLA|dynamicTable|graph|savedMap'), + "title": zod.string().optional().describe('The widget title') +}).and(zod.object({ + "missinglines": zod.array(zod.string().describe('The Missing lines of the graph')).optional().describe('The Missing lines of the graph'), + "timeScale": zod.string().optional().describe('The specified timescale for the graph'), + "instances": zod.array(zod.number().describe('The matched instances of graph')).optional().describe('The matched instances of graph'), + "timestamps": zod.array(zod.number().describe('The timestamps of the graph')).optional().describe('The timestamps of the graph'), + "minValue": zod.object({ + +}).optional().describe('Specifies the minimum value of the graph'), + "startTime": zod.number().optional().describe('Specifies the start-time of the graph'), + "id": zod.number().optional().describe('The Id of the graph'), + "rigid": zod.boolean().optional().describe('true | false\nSpecifies if the graph is rigid or not'), + "lines": zod.array(zod.object({ + "colorName": zod.string().optional().describe('The color name'), + "std": zod.object({ + +}).optional().describe('The standard deviation value'), + "visible": zod.boolean().optional().describe('true | false\nSpecifies whether the graph will be visible or not'), + "color": zod.string().optional().describe('The color of the graph'), + "data": zod.array(zod.number().describe('The polled data used to plot the graph')).optional().describe('The polled data used to plot the graph'), + "max": zod.object({ + +}).optional().describe('The max value of datapoint or instance'), + "legend": zod.string().optional().describe('The legend of the datapoint or instance'), + "description": zod.string().optional().describe('The description for the datapoint or instance'), + "label": zod.string().optional().describe('The label for the datapoint or instance'), + "type": zod.string().optional().describe('Specifies how the data of the datapoint or instance will be plotted\nThe values can be line | area | stack | column | statusBar'), + "min": zod.object({ + +}).optional().describe('The min value of the datapoint or instance'), + "avg": zod.object({ + +}).optional().describe('The average value of the datapoint or instance'), + "decimal": zod.number().optional().describe('The decimal value\nThe values can be -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8'), + "useYMax": zod.boolean().optional().describe('true | false\nSpecifies whether to use YMax or not') +}).describe('The properties of the graph and graph lines')).optional().describe('The properties of the graph and graph lines'), + "height": zod.number().optional().describe('Specifies the height of graph'), + "endTZOffset": zod.number().optional().describe('Specifies the end TimeZone Offset of the graph'), + "base1024": zod.boolean().optional().describe('true | false\nChanges base scale from 1000 to 1024 if value is set to true'), + "dsName": zod.string().optional().describe('The name of the DataSource to be used to plot the graph'), + "maxValue": zod.object({ + +}).optional().describe('Specifies the maximum value of the graph'), + "displayPrio": zod.number().optional().describe('The display priority of the graph in your LogicMonitor portal'), + "timeZoneId": zod.string().optional().describe('The Id of selected Time Zone'), + "timeZone": zod.string().optional().describe('The selected timezone for the graph'), + "startTZOffset": zod.number().optional().describe('Specifies the start TimeZone Offset of the graph'), + "xAxisName": zod.string().optional().describe('The label that will be displayed along the X axis'), + "width": zod.number().optional().describe('Specifies the width of graph'), + "name": zod.string().optional().describe('The Name of the Graph'), + "verticalLabel": zod.string().optional().describe('The label that will be displayed along the y axis (Vertical Label)'), + "step": zod.number().optional().describe('The Step of the graph'), + "endTime": zod.number().optional().describe('Specifies the end-time of the graph'), + "scopes": zod.array(zod.object({ + "serviceGroupIds": zod.array(zod.number().describe('The service group Id')).optional().describe('The service group Id'), + "serviceId": zod.number().optional().describe('The service Id'), + "type": zod.string().optional().describe('The values can be device | service | website'), + "deviceGroupIds": zod.array(zod.number().describe('The device group Id')).optional().describe('The device group Id'), + "deviceId": zod.number().optional().describe('The device Id') +}).describe('Scopes: use this field to find match opsnote')).optional().describe('Scopes: use this field to find match opsnote'), + "base": zod.number().optional().describe('The Base of the graph'), + "exportFileName": zod.string().optional().describe('The export file name') +})) + + +/** + * Update a specific report group by its ID + * @summary Update report group + */ +export const patchReportGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchReportGroupByIdBody = zod.object({ + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description') +}) + +export const patchReportGroupByIdResponse = zod.object({ + "matchedReportCount": zod.number().optional().describe('The matched reports count of this group'), + "userPermission": zod.string().optional().describe('The user permission on the report group'), + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description'), + "id": zod.number().optional().describe('The report group id'), + "reportsCount": zod.number().optional().describe('The reports count of this group') +}) + + +/** + * Retrieve a specific report group by its ID + * @summary Get report group by id + */ +export const getReportGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getReportGroupByIdResponse = zod.object({ + "matchedReportCount": zod.number().optional().describe('The matched reports count of this group'), + "userPermission": zod.string().optional().describe('The user permission on the report group'), + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description'), + "id": zod.number().optional().describe('The report group id'), + "reportsCount": zod.number().optional().describe('The reports count of this group') +}) + + +/** + * Delete a specific report group by its ID + * @summary Delete report group + */ +export const deleteReportGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteReportGroupByIdResponse = zod.object({ + +}) + + +/** + * Update a specific report group by its ID + * @summary Update report group + */ +export const updateReportGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateReportGroupByIdBody = zod.object({ + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description') +}) + +export const updateReportGroupByIdResponse = zod.object({ + "matchedReportCount": zod.number().optional().describe('The matched reports count of this group'), + "userPermission": zod.string().optional().describe('The user permission on the report group'), + "name": zod.string().describe('The report group name'), + "description": zod.string().optional().describe('The report group description'), + "id": zod.number().optional().describe('The report group id'), + "reportsCount": zod.number().optional().describe('The reports count of this group') +}) + + +/** + * Create a new role + * @summary Add role + */ +export const addRoleBody = zod.object({ + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "name": zod.string().describe('The name of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + +export const addRoleResponse = zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +}) + + +/** + * Retrieve a paginated list of roles + * @summary Get role list + */ +export const getRoleListQuerySizeDefault = 50;export const getRoleListQueryOffsetDefault = 0; + +export const getRoleListQueryParams = zod.object({ + "excludeAdmin": zod.boolean().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getRoleListQuerySizeDefault), + "offset": zod.number().default(getRoleListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getRoleListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "enableRemoteSessionInCompanyLevel": zod.boolean().optional().describe('Whether Remote Session should be enabled at the account level'), + "privileges": zod.array(zod.object({ + "objectName": zod.string().optional().describe('The privilege object name'), + "subOperation": zod.string().optional().describe('The highest privilege operation on its children operations'), + "operation": zod.string().describe('The privilege operation'), + "objectId": zod.string().describe('The privilege object identifier'), + "objectType": zod.string().describe('The privilege object type. The values can be dashboard_group|dashboard|host_group|service_group|website_group|report_group|remoteSession|chat|setting|device_dashboard|help|logs|configNeedDeviceManagePermission|map|resourceMapTab|tracesManageTab|costOptimization|dexda|lmSupportAccess') +}).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account')).describe('The account privileges associated with the role. Privileges can be added to a role for each area of your account'), + "userPermission": zod.string().optional().describe('The permission of current role with the admin. The values can be write|read|none'), + "description": zod.string().optional().describe('The description of the role'), + "customHelpLabel": zod.string().optional().describe('The label for the custom help URL as it will appear in the \'Help & Support\' dropdown menu'), + "customHelpURL": zod.string().optional().describe('The URL that should be added to the \'Help & Support\' dropdown menu'), + "associatedUserCount": zod.number().optional().describe('The count of the users which are belongs to the role'), + "name": zod.string().describe('The name of the role'), + "id": zod.number().optional().describe('The Id of the role'), + "twoFARequired": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for this role'), + "requireEULA": zod.boolean().optional().describe('Whether or not users assigned this role should be required to acknowledge the EULA (end user license agreement)'), + "acctRequireTwoFA": zod.boolean().optional().describe('Whether Two-Factor Authentication should be required for the entire account'), + "roleGroupId": zod.number().optional().describe('The group Id of the role') +})).optional() +}) + + +/** + * add alert rule + * @summary add alert rule + */ +export const addAlertRuleBody = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + +export const addAlertRuleResponse = zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "id": zod.number().optional().describe('The Id of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalatingChain": zod.object({ + +}).optional().describe('The escalation chain associated with the alert rule'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +}) + + +/** + * get alert rule list + * @summary get alert rule list + */ +export const getAlertRuleListQuerySizeDefault = 50;export const getAlertRuleListQueryOffsetDefault = 0; + +export const getAlertRuleListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAlertRuleListQuerySizeDefault), + "offset": zod.number().default(getAlertRuleListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAlertRuleListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "datapoint": zod.string().optional().describe('The datapoint for which the alert rule is configured to match'), + "instance": zod.string().optional().describe('The instance for which the alert rule is configured to match'), + "devices": zod.array(zod.string().describe('The device names and service names for which the alert rule is configured to match')).optional().describe('The device names and service names for which the alert rule is configured to match'), + "escalatingChainId": zod.number().describe('The id of the escalation chain associated with the alert rule'), + "resourceProperties": zod.array(zod.object({ + "name": zod.string().describe('The resource property name'), + "value": zod.string().describe('The resource property value') +}).describe('The resource property filters list')).optional().describe('The resource property filters list'), + "sendAnomalySuppressedAlert": zod.boolean().describe('Whether or not send anomaly suppressed alert'), + "priority": zod.number().describe('The priority associated with the alert rule'), + "suppressAlertAckSdt": zod.boolean().optional().describe('Whether or not status notifications for acknowledgements and SDTs should be sent to the alert rule'), + "datasource": zod.string().optional().describe('The datasource for which the alert rule is configured to match'), + "suppressAlertClear": zod.boolean().optional().describe('Whether or not alert clear notifications should be sent to the alert rule'), + "name": zod.string().describe('The name of the alert rule'), + "id": zod.number().optional().describe('The Id of the alert rule'), + "levelStr": zod.string().optional().describe('The alert severity levels for which the alert rule is configured to match. \nThe values can be All|Warn|Error|Critical'), + "deviceGroups": zod.array(zod.string().describe('The device groups and service groups for which the alert rule is configured to match')).optional().describe('The device groups and service groups for which the alert rule is configured to match'), + "escalatingChain": zod.object({ + +}).optional().describe('The escalation chain associated with the alert rule'), + "escalationInterval": zod.number().optional().describe('The escalation interval associated with the alert rule, in minutes') +})).optional() +}) + + +/** + * Retrieve the metrics usage information + * @summary Get metrics usage + */ +export const getMetricsUsageResponse = zod.object({ + "numOfStoppedAzureDevices": zod.number().optional().describe('Number of stopped Azure resources'), + "numOfServices": zod.number().optional().describe('Number of services (created via LM Service Insight)'), + "numOfTerminatedAzureDevices": zod.number().optional().describe('Number of terminated Azure resources'), + "numberOfStandardDevices": zod.number().optional().describe('Number of standard devices'), + "numOfStoppedGcpDevices": zod.number().optional().describe('Number of stopped GCP resources not monitored with a local Collector'), + "numOfCombinedGcpDevices": zod.number().optional().describe('Number of GCP resources monitored with a local Collector'), + "numOfAWSDevices": zod.number().optional().describe('Number of AWS resources not monitored with a local Collector'), + "numberOfKubernetesDevices": zod.number().optional().describe('Number of monitored Kubernetes Nodes, Pods, and Services'), + "numOfGcpDevices": zod.number().optional().describe('Number of GCP resources'), + "numOfAzureDevices": zod.number().optional().describe('Number of Azure resources not monitored with a local Collector'), + "numOfCombinedAzureDevices": zod.number().optional().describe('Number of Azure resources monitored with a local Collector'), + "numOfTerminatedAWSDevices": zod.number().optional().describe('Number of terminated AWS resources'), + "numOfTerminatedGcpCloudDevices": zod.number().optional().describe('Number of terminated GCP resources'), + "numOfStoppedAWSDevices": zod.number().optional().describe('Number of stopped AWS resources'), + "numberOfDevices": zod.number().optional().describe('Sum of numOfStandardDevices, numOfCombinedAWSDevices, numOfCombinedAzureDevices, and numOfCombinedGCPDevices'), + "numOfConfigSourceDevices": zod.number().optional().describe('Number of devices with active ConfigSources'), + "numOfWebsites": zod.number().optional().describe('Number of websites'), + "numOfCombinedAWSDevices": zod.number().optional().describe('Number of AWS resources monitored with a local Collector') +}) + + +/** + * Retrieves the list of website checkpoints + * @summary Get website checkpoint list + */ +export const getSiteMonitorCheckPointListQuerySizeDefault = 50;export const getSiteMonitorCheckPointListQueryOffsetDefault = 0; + +export const getSiteMonitorCheckPointListQueryParams = zod.object({ + "type": zod.string().optional().describe('Type of checkpoint to filter. If not specified, returns website legacy checkpoints.'), + "fields": zod.string().optional(), + "size": zod.number().default(getSiteMonitorCheckPointListQuerySizeDefault), + "offset": zod.number().default(getSiteMonitorCheckPointListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSiteMonitorCheckPointListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "displayPrio": zod.number().optional().describe('The display priority of the SiteMonitor Checkpoint in your LogicMonitor portal'), + "name": zod.string().optional().describe('The SiteMonitor checkPoint name'), + "isEnabledInRoot": zod.boolean().optional().describe('Checks if sitemonitor enabled in root service group'), + "description": zod.string().describe('Check point description'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint') +})).optional() +}) + + +/** + * get netflow endpoints + * @summary get netflow endpoints + */ +export const getNetflowEndpointListParams = zod.object({ + "id": zod.number() +}) + +export const getNetflowEndpointListQuerySizeDefault = 50;export const getNetflowEndpointListQueryOffsetDefault = 0; + +export const getNetflowEndpointListQueryParams = zod.object({ + "end": zod.number().optional(), + "netflowFilter": zod.string().optional(), + "start": zod.number().optional(), + "port": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getNetflowEndpointListQuerySizeDefault), + "offset": zod.number().default(getNetflowEndpointListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getNetflowEndpointListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "lastSeen": zod.number().optional(), + "percentUsage": zod.number().optional(), + "dataType": zod.string().optional(), + "IP": zod.string().optional(), + "usage": zod.number().optional(), + "dns": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}) + + +/** + * Update the details of a specific report by its ID + * @summary Update report + */ +export const patchReportByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchReportByIdBody = zod.object({ + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "name": zod.string().describe('The name of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + +export const patchReportByIdResponse = zod.object({ + "lastmodifyUserId": zod.number().optional().describe('The Id of the user that last modified the report'), + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "userPermission": zod.string().optional().describe('The permissions associated with the user who made the API call'), + "lastGenerateOn": zod.number().optional().describe('The time, in epoch format, that the report was last generated'), + "reportLinkNum": zod.number().optional().describe('The number of links associated with the report, where each link corresponds to a generated report'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "lastGenerateSize": zod.number().optional().describe('The size of the report, in Bytes, the last time it was generated'), + "customReportTypeId": zod.number().optional().describe('The id of the custom report template, if the report is a custom report. An id of 0 indicates that the report is not a custom report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "lastGeneratePages": zod.number().optional().describe('The number of pages in the report, the last time it was generated'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "customReportTypeName": zod.string().optional().describe('The name of the custom report template'), + "name": zod.string().describe('The name of the report'), + "enableViewAsOtherUser": zod.boolean().optional().describe('Whether or not other users are allowed to view the report as the user who last modified the report'), + "lastmodifyUserName": zod.string().optional().describe('The username of the user that last modified the report'), + "id": zod.number().optional().describe('The id of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + + +/** + * Retrieve the details of a specific report by its ID + * @summary Get report by ID + */ +export const getReportByIdParams = zod.object({ + "id": zod.number() +}) + +export const getReportByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getReportByIdResponse = zod.object({ + "lastmodifyUserId": zod.number().optional().describe('The Id of the user that last modified the report'), + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "userPermission": zod.string().optional().describe('The permissions associated with the user who made the API call'), + "lastGenerateOn": zod.number().optional().describe('The time, in epoch format, that the report was last generated'), + "reportLinkNum": zod.number().optional().describe('The number of links associated with the report, where each link corresponds to a generated report'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "lastGenerateSize": zod.number().optional().describe('The size of the report, in Bytes, the last time it was generated'), + "customReportTypeId": zod.number().optional().describe('The id of the custom report template, if the report is a custom report. An id of 0 indicates that the report is not a custom report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "lastGeneratePages": zod.number().optional().describe('The number of pages in the report, the last time it was generated'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "customReportTypeName": zod.string().optional().describe('The name of the custom report template'), + "name": zod.string().describe('The name of the report'), + "enableViewAsOtherUser": zod.boolean().optional().describe('Whether or not other users are allowed to view the report as the user who last modified the report'), + "lastmodifyUserName": zod.string().optional().describe('The username of the user that last modified the report'), + "id": zod.number().optional().describe('The id of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + + +/** + * Delete a specific report by its ID + * @summary Delete report + */ +export const deleteReportByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteReportByIdResponse = zod.object({ + +}) + + +/** + * Update the details of a specific report by its ID + * @summary Update report + */ +export const updateReportByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateReportByIdBody = zod.object({ + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "name": zod.string().describe('The name of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + +export const updateReportByIdResponse = zod.object({ + "lastmodifyUserId": zod.number().optional().describe('The Id of the user that last modified the report'), + "delivery": zod.string().optional().describe('Whether or not the report is configured to be delivered via email. Acceptable values are: none, email'), + "userPermission": zod.string().optional().describe('The permissions associated with the user who made the API call'), + "lastGenerateOn": zod.number().optional().describe('The time, in epoch format, that the report was last generated'), + "reportLinkNum": zod.number().optional().describe('The number of links associated with the report, where each link corresponds to a generated report'), + "groupId": zod.number().optional().describe('The Id of the group the report is in, where Id=0 is the root report group'), + "format": zod.string().optional().describe('The format of the report. Allowable values are: HTML, PDF, CSV, WORD'), + "description": zod.string().optional().describe('The description of the report'), + "lastGenerateSize": zod.number().optional().describe('The size of the report, in Bytes, the last time it was generated'), + "customReportTypeId": zod.number().optional().describe('The id of the custom report template, if the report is a custom report. An id of 0 indicates that the report is not a custom report'), + "type": zod.string().describe('The report type. Acceptable values are: Alert,Alert SLA,Alert threshold,Alert trends,Host CPU,Host group inventory,Host inventory,Host metric trends,Interfaces Bandwidth,Netflow device metric,Service Level Agreement,Website Service Overview,Word template,Audit Log,Alert Forecasting,Dashboard,Website SLA,User,Role'), + "lastGeneratePages": zod.number().optional().describe('The number of pages in the report, the last time it was generated'), + "reportLinkExpire": zod.string().optional().describe('The report link Expire. Allowable values are:High Flexibility,High Security'), + "schedule": zod.string().optional().describe('A cron schedule that indicates when the report will be delivered via email'), + "recipients": zod.array(zod.object({ + "additionInfo": zod.string().optional().describe('If the type is admin and the method is email, the field should indicate the actual email address of the admin'), + "method": zod.string().optional().describe('Specifies the method to get the report. This should always be email'), + "type": zod.string().describe('Specifies the recipient type. The values can be admin|arbitrary|group, where admin refers to a user in the account and arbitrary refers to an email address not associated with a user account.'), + "addr": zod.string().describe('This should be a username if type=admin, or an email address if type=arbitrary') +}).describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to')).optional().describe('If the report is configured to be delivered via email, this object provides the recipients that the report will be delivered to'), + "customReportTypeName": zod.string().optional().describe('The name of the custom report template'), + "name": zod.string().describe('The name of the report'), + "enableViewAsOtherUser": zod.boolean().optional().describe('Whether or not other users are allowed to view the report as the user who last modified the report'), + "lastmodifyUserName": zod.string().optional().describe('The username of the user that last modified the report'), + "id": zod.number().optional().describe('The id of the report'), + "scheduleTimezone": zod.string().optional().describe('The sepecific timezone for the scheduled report') +}) + + +/** + * get data for a website checkpoint + * @summary get data for a website checkpoint + */ +export const getWebsiteCheckpointDataByIdParams = zod.object({ + "srvId": zod.number(), + "checkId": zod.number() +}) + +export const getWebsiteCheckpointDataByIdQueryParams = zod.object({ + "period": zod.number().optional(), + "start": zod.number().optional(), + "end": zod.number().optional(), + "datapoints": zod.string().optional(), + "format": zod.string().optional(), + "aggregate": zod.string().optional().describe('the aggregate option') +}) + +export const getWebsiteCheckpointDataByIdResponse = zod.object({ + "values": zod.array(zod.array(zod.number().describe('Datapoint values 2-D list')).describe('Datapoint values 2-D list')).optional().describe('Datapoint values 2-D list'), + "time": zod.array(zod.number().describe('Timestamp list')).optional().describe('Timestamp list'), + "nextPageParams": zod.string().optional().describe('The next page parameters') +}) + + +/** + * Create a new log partition + * @summary Create a new log partition + */ +export const createLogPartitionBody = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + +export const createLogPartitionResponse = zod.object({ + "parent": zod.number().optional().describe('Parent Partition Id'), + "userPermission": zod.string().optional().describe('Partition user permission'), + "criteria": zod.string().optional().describe('Partition Criteria'), + "changelogs": zod.array(zod.object({ + +})).optional(), + "description": zod.string().optional().describe('Partition description'), + "active": zod.boolean().describe('Partition active state'), + "pausedAt": zod.number().optional().describe('Epoch time when partition was paused'), + "priority": zod.number().optional().describe('Partition Priority'), + "name": zod.string().describe('Partition Name'), + "id": zod.string().optional().describe('Partition Id'), + "fullname": zod.string().optional().describe('Partition Fullname'), + "sku": zod.string().optional(), + "tenant": zod.string().optional().describe('Tenant Name'), + "retention": zod.number().describe('Partition Retention in days') +}) + + +/** + * Retrieve a list of all log partitions + * @summary Retrieve a list of all log partitions + */ +export const getAllLogPartitionsResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "isMin": zod.boolean().optional(), + "items": zod.array(zod.object({ + +})).optional() +}) + + +/** + * Update the default dashboard settings for a user or group + * @summary Update default dashboard + */ +export const patchDefaultDashboardParams = zod.object({ + "id": zod.string() +}) + +export const patchDefaultDashboardBody = zod.object({ + "id": zod.string().optional(), + "value": zod.string().optional() +}) + +export const patchDefaultDashboardResponse = zod.object({ + +}) + + +/** + * Update the default dashboard settings for a user or group + * @summary Update default dashboard + */ +export const updateDefaultDashboardParams = zod.object({ + "id": zod.string() +}) + +export const updateDefaultDashboardBody = zod.object({ + "id": zod.string().optional(), + "value": zod.string().optional() +}) + +export const updateDefaultDashboardResponse = zod.object({ + +}) + + +/** + * Retrieve a specific device datasource by its ID + * @summary Get device datasource + */ +export const getDeviceDatasourceByIdParams = zod.object({ + "deviceId": zod.number(), + "id": zod.number() +}) + +export const getDeviceDatasourceByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceDatasourceByIdResponse = zod.object({ + "alertStatus": zod.string().optional(), + "autoDiscovery": zod.boolean().optional(), + "dataSourceDisplayName": zod.string().optional(), + "deviceId": zod.number().optional(), + "deviceName": zod.string().optional(), + "createdOn": zod.number().optional(), + "collectMethod": zod.string().optional(), + "dataSourceId": zod.number().optional(), + "graphs": zod.array(zod.object({ + "displayPrio": zod.number().optional(), + "name": zod.string().optional(), + "id": zod.number().optional(), + "title": zod.string().optional() +})).optional(), + "sdtAt": zod.string().optional(), + "nextAutoDiscoveryOn": zod.number().optional(), + "id": zod.number().optional(), + "alertStatusPriority": zod.number().optional(), + "alertDisableStatus": zod.string().optional(), + "dataSourceDescription": zod.string().optional(), + "overviewGraphs": zod.array(zod.object({ + "displayPrio": zod.number().optional(), + "name": zod.string().optional(), + "id": zod.number().optional(), + "title": zod.string().optional() +})).optional(), + "stopMonitoring": zod.boolean().optional(), + "assignedOn": zod.number().optional(), + "isMultiple": zod.boolean().optional(), + "instanceNumber": zod.number().optional(), + "updatedOn": zod.number().optional(), + "sdtStatus": zod.string().optional(), + "dataSourceName": zod.string().optional(), + "deviceDisplayName": zod.string().optional(), + "monitoringInstanceNumber": zod.number().optional(), + "groupsDisabledThisSource": zod.array(zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).describe('alerting disabled on which tree node')).optional(), + "groupName": zod.string().optional(), + "instanceAutoGroupEnabled": zod.boolean().optional(), + "alertingDisabledOn": zod.object({ + "userPermission": zod.string().optional(), + "displayName": zod.string().optional(), + "id": zod.number().optional(), + "type": zod.string().optional() +}).optional().describe('alerting disabled on which tree node'), + "dataSourceType": zod.string().optional(), + "status": zod.number().optional() +}) + + +/** + * get a list of SDTs for a website group (Response may contain extra fields depending upon the type of SDT) + * @summary get a list of SDTs for a website group (Response may contain extra fields depending upon the type of SDT) + */ +export const getAllSDTListByWebsiteGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getAllSDTListByWebsiteGroupIdQuerySizeDefault = 50;export const getAllSDTListByWebsiteGroupIdQueryOffsetDefault = 0; + +export const getAllSDTListByWebsiteGroupIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getAllSDTListByWebsiteGroupIdQuerySizeDefault), + "offset": zod.number().default(getAllSDTListByWebsiteGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getAllSDTListByWebsiteGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "endDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "timezone": zod.string().optional().describe('The specific timezone for SDT'), + "sdtType": zod.string().optional().describe('The type of sdt. The values can be oneTime|weekly|monthly|daily|monthlyByWeek'), + "defaultValue": zod.iso.datetime({}).optional(), + "monthDay": zod.number().optional().describe('The values can be 1 | 2....| 31. Specifies the day of the month that the SDT will be active for a monthly SDT'), + "weekOfMonth": zod.string().optional().describe('The week of the month that the SDT will be active for a monthly SDT'), + "admin": zod.string().optional().describe('The name of the user that created the SDT'), + "endDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will end'), + "type": zod.string().describe('The type of resource that this SDT is for. The values can be CollectorSDT | DeviceDataSourceInstanceSDT | DeviceBatchJobSDT | DeviceClusterAlertDefSDT | DeviceDataSourceInstanceGroupSDT | DeviceDataSourceSDT | DeviceEventSourceSDT | ResourceGroupSDT | ResourceSDT | WebsiteCheckpointSDT | WebsiteGroupSDT | WebsiteSDT | DeviceLogPipeLineResourceSDT'), + "isEffective": zod.boolean().optional().describe('The values can be true|false, where true: the SDT is currently active\nfalse: the SDT is currently inactive'), + "minute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT should begin for a repeating SDT'), + "duration": zod.number().optional().describe('The duration of the SDT in minutes'), + "endHour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT ends for a repeating SDT'), + "startDateTime": zod.number().optional().describe('The epoch time, in milliseconds, that the SDT will start'), + "hour": zod.number().optional().describe('The values can be 1 | 2....| 24. Specifies the hour that the SDT will start for a repeating SDT (daily, weekly, or monthly)'), + "startDateTimeOnLocal": zod.string().optional().describe('The date, time and time zone that the SDT will end at'), + "weekDay": zod.string().optional().describe('The week day of sdt. The values can be SUNDAY|MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY'), + "comment": zod.string().optional().describe('The notes associated with the SDT'), + "id": zod.string().optional().describe('The Id of the SDT. This value will be in the following format \"XX_##\" where XX will refer to the type of SDT and ## will refer to the number of SDTs of that type'), + "endMinute": zod.number().optional().describe('The values can be 1 | 2....| 60. Specifies the minute of the hour that the SDT ends for a repeating SDT') +})).optional() +}) + + +/** + * Generate a report based on the given report ID + * @summary Run a report + */ +export const generateReportByIdParams = zod.object({ + "id": zod.number() +}) + +export const generateReportByIdBody = zod.object({ + "withAdminId": zod.number().optional().describe('Generate the report with the admin. 0 mean current user'), + "receiveEmails": zod.string().optional().describe('The email addresses that LogicMonitor should send the report to, separated by commas. If set to null, the report will be generated immediately and the response will contain the report file URLOtherwise, the report will be generated in the background and delivered to the specified email addresses') +}) + +export const generateReportByIdResponse = zod.object({ + "reportId": zod.number().describe('The id of the report'), + "taskId": zod.number().describe('The task id of the generating process'), + "resulturl": zod.string().optional().describe('The url of the generated report') +}) + + +/** + * Imports a datasource from an XML file + * @summary Import datasource via XML + */ +export const importDataSourceBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}) +}) + +export const importDataSourceResponse = zod.object({ + +}) + + +/** + * Updates the event source with the provided ID + * @summary Update event source by ID + */ +export const patchEventSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchEventSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const patchEventSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + +export const patchEventSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + + +/** + * Retrieves an event source by its ID + * @summary Get event source by ID + */ +export const getEventSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const getEventSourceByIdQueryParams = zod.object({ + "format": zod.string().optional() +}) + +export const getEventSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + + +/** + * Deletes an event source by its ID + * @summary Delete event source by ID + */ +export const deleteEventSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteEventSourceByIdResponse = zod.object({ + +}) + + +/** + * Updates the event source with the provided ID + * @summary Update event source by ID + */ +export const updateEventSourceByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateEventSourceByIdQueryParams = zod.object({ + "reason": zod.string().optional() +}) + +export const updateEventSourceByIdBody = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + +export const updateEventSourceByIdResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "eventSource": zod.unknown().optional(), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collector": zod.string().optional().describe('The EventSource collector type. The values can be wineventlog | syslog | snmptrap | echo | logfile | scriptevent | awsrss | azurerss | azureadvisor | gcpatom | awsrdspievent | azureresourcehealthevent | azureemergingissue | azureloganalyticsworkspacesevent | awstrustedadvisor | awshealth | awsorganizationalhealth | ipmievent'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "alertBodyTemplate": zod.string().optional().describe('The alert message body for the EventSource'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "suppressDuplicatesES": zod.boolean().optional().describe('Whether or not duplicate alerts have to be suppressed'), + "alertSubjectTemplate": zod.string().optional().describe('The alert message subject for the EventSource'), + "eventSourceFilters": zod.array(zod.object({ + "eventSourceId": zod.number().optional(), + "op": zod.string().optional(), + "originId": zod.string().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "alertLevel": zod.string().optional().describe('The default alert level. The values can be warn | error | critical | doMapping'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "filters": zod.array(zod.object({ + "name": zod.string().describe('The filter name'), + "comment": zod.string().describe('The filter comment'), + "id": zod.number().optional().describe('The filter id'), + "value": zod.string().describe('The filter value'), + "operator": zod.string().describe('The filter operator') +}).describe('The filters for the EventSource')).optional().describe('The filters for the EventSource'), + "version": zod.number().optional().describe('The epoch time of the last update to the EventSource'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The auditVersion of the EventSource'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "name": zod.string().describe('The name of the EventSource'), + "clearAfterAck": zod.boolean().optional().describe('Whether or not the alert should clear after acknowledgement'), + "alertEffectiveIval": zod.number().describe('The time in minutes after which the alert should clear') +}) + + +/** + * get a list of websites for a group (Response may contain extra fields depending upon the type of check { PingCheck | WebCheck} being added) + * @summary get a list of websites for a group (Response may contain extra fields depending upon the type of check { PingCheck | WebCheck} being added) + */ +export const getImmediateWebsiteListByWebsiteGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getImmediateWebsiteListByWebsiteGroupIdQuerySizeDefault = 50;export const getImmediateWebsiteListByWebsiteGroupIdQueryOffsetDefault = 0; + +export const getImmediateWebsiteListByWebsiteGroupIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getImmediateWebsiteListByWebsiteGroupIdQuerySizeDefault), + "offset": zod.number().default(getImmediateWebsiteListByWebsiteGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getImmediateWebsiteListByWebsiteGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "template": zod.object({ + +}).optional().describe('The website template'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "groupId": zod.number().optional().describe('The id of the group the website is in'), + "overallAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails the number of checks specified by transition from the test locations specified by globalSmAlertCond'), + "pollingInterval": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10\nThe polling interval for the website, in units of minutes. This value indicates how often the website is checked. The minimum is 1 minute, and the maximum is 10 minutes'), + "description": zod.string().optional().describe('The description of the website'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the website\nfalse: alerting is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "type": zod.string().describe('The values can be pingcheck|webcheck\nSpecifies the type of service'), + "rolePrivileges": zod.array(zod.string().describe('The role privilege operation(s) for this website that are granted to the user who made the API request')).optional().describe('The role privilege operation(s) for this website that are granted to the user who made the API request'), + "lastUpdated": zod.number().optional().describe('The time (in epoch format) that the website was updated'), + "stopMonitoringByFolder": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for all services in the website\'s folder\nfalse: monitoring is not disabled for all services in website\'s folder'), + "id": zod.number().optional().describe('The id of the website'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the website\nfalse: monitoring is enabled for the website\nIf stopMonitoring=true, then alerting will also be disabled by default for the website'), + "userPermission": zod.string().optional().describe('The values can be write|read|ack. The permission level of the user that made the API request'), + "individualSmAlertEnable": zod.boolean().optional().describe('The values can be true|false where\ntrue: an alert will be triggered if a check fails from an individual test location\nfalse: an alert will not be triggered if a check fails from an individual test location'), + "checkpoints": zod.array(zod.object({ + "geoInfo": zod.string().optional().describe('The geographical information (location) of the SiteMonitor Checkpoint'), + "id": zod.number().optional().describe('The Id of the SiteMonitor Checkpoint'), + "smgId": zod.number().optional().describe('The sitemonitor group id') +}).describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint')).optional().describe('The checkpoints from the which the website is monitored. This object should reference each location specified in testLocation in addition to an \'Overall\' checkpoint'), + "steps": zod.array(zod.object({ + "schema": zod.string().optional().describe('HTTP schema'), + "respType": zod.string().optional().describe('The values can be Plain Text/String|Glob expression|JSON|XML|Multi line key value pair\nStep Response Type'), + "HTTPHeaders": zod.string().optional().describe('HTTP header'), + "auth": zod.object({ + "password": zod.string().describe('NTLM authentication password'), + "type": zod.string().describe('Authentication type'), + "userName": zod.string().describe('NTLM authentication userName') +}).optional().describe('Authorization Information'), + "matchType": zod.string().optional().describe('Body match type'), + "description": zod.string().optional().describe('The description of the Step'), + "type": zod.string().optional().describe('The values can be script|config\nThe type of service step'), + "timeout": zod.number().optional().describe('Request timeout measured in seconds'), + "useDefaultRoot": zod.boolean().optional().describe('The values can be true|false\nCheck if using the default root'), + "path": zod.string().optional().describe('Path for JSON, XPATH'), + "HTTPMethod": zod.string().optional().describe('The values can be GET|HEAD|POST\nSpecifies the type of HTTP method'), + "enable": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to enable step or not'), + "HTTPVersion": zod.string().optional().describe('The values can be 1.1|1\nSpecifies HTTP version'), + "keyword": zod.string().optional().describe('Keyword that matches the body'), + "respScript": zod.string().optional().describe('The Step Response Script'), + "label": zod.string().optional().describe('The Label of the Step'), + "url": zod.string().optional().describe('The URL of service step'), + "invertMatch": zod.boolean().optional().describe('The values can be true|false\nChecks if invert matches or not'), + "reqScript": zod.string().optional().describe('The Request Script'), + "HTTPBody": zod.string().optional().describe('HTTP Body'), + "followRedirection": zod.boolean().optional().describe('The values can be true|false\nSpecifies whether to follow redirection or not'), + "postDataEditType": zod.string().optional().describe('The values can be Raw|Formatted Data\nSpecifies POST data type'), + "name": zod.string().optional().describe('The name of the Step'), + "requireAuth": zod.boolean().optional().describe('The values can be true|false\nChecks if authorization required or not'), + "reqType": zod.string().optional().describe('The values can be script|config\nStep Request Type'), + "fullpageLoad": zod.boolean().optional().describe('The values can be true|false\nChecks if full page should be loaded or not'), + "statusCode": zod.string().optional().describe('The expected status code') +}).describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step')).optional().describe('Required for type=webcheck , An object comprising one or more steps, see the table below for the properties included in each step'), + "transition": zod.number().optional().describe('The values can be 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30 | 60\nThe number of checks that must fail before an alert is triggered'), + "globalSmAlertCond": zod.number().optional().describe('The number of test locations that checks must fail at to trigger an alert, where the alert triggered will be consistent with the value of overallAlertLevel. Possible values and corresponding number of Site Monitor locations are\n0 : all\n1 : half\n2 : more than one\n3 : any'), + "isInternal": zod.boolean().optional().describe('Whether or not the website is internal'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collectors that are monitoring the website, if the website is internal'), + "domain": zod.string().optional().describe('Required for type=webcheck , The domain of the service. This is the base URL of the service'), + "name": zod.string().describe('The name of the website'), + "useDefaultLocationSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The checkpoint locations configured in the website Default Settings will be used\nfalse: The checkpoint locations specified in the testLocation will be used'), + "useDefaultAlertSetting": zod.boolean().optional().describe('The values can be true|false where\ntrue: The alert settings configured in the website Default Settings will be used\nfalse: Service Default Settings will not be used, and you will need to specify individualSMAlertEnable, individualAlertLevel, globalSmAlertConf, overallAlertLevel and pollingInterval'), + "individualAlertLevel": zod.string().optional().describe('The values can be warn|error|critical\nThe level of alert to trigger if the website fails a check from an individual test location'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The properties associated with the website'), + "status": zod.string().optional().describe('Whether the website is dead (the collector is down) or not') +})).optional() +}) + + +/** + * Retrieve a paginated list of data for device instances + * @summary Fetch device instances data + */ +export const fetchDeviceInstancesDataQueryParams = zod.object({ + "period": zod.number().optional(), + "start": zod.number().optional(), + "end": zod.number().optional(), + "aggregate": zod.string().optional().describe('The aggregate option') +}) + +export const fetchDeviceInstancesDataBody = zod.object({ + "instanceIds": zod.string().describe('the ids of the instances, separated by commas') +}) + +export const fetchDeviceInstancesDataResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "instanceId": zod.string().optional(), + "values": zod.array(zod.array(zod.number().describe('Datapoint values 2-D list')).describe('Datapoint values 2-D list')).optional().describe('Datapoint values 2-D list'), + "errMsg": zod.string().optional(), + "time": zod.array(zod.number().describe('Timestamp list')).optional().describe('Timestamp list'), + "nextPageParams": zod.string().optional().describe('The next page parameters'), + "dataSourceName": zod.string().optional() +})).optional() +}) + + +/** + * get metrics usage with company settings summary + * @summary get metrics usage with company settings summary + */ +export const getMetricsSummaryResponse = zod.object({ + "numberOfOpenAlerts": zod.number().optional(), + "numOfTerminatedAzureDevices": zod.number().optional().describe('Number of terminated Azure resources'), + "numOfStoppedGcpDevices": zod.number().optional().describe('Number of stopped GCP resources not monitored with a local Collector'), + "numberOfUserRoles": zod.number().optional(), + "numOfAWSDevices": zod.number().optional().describe('Number of AWS resources not monitored with a local Collector'), + "destroyOnLocal": zod.string().optional(), + "numOfSavedMaps": zod.number().optional(), + "zuoraInvoiceDetails": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "hostGroupsInfo": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "numberOfKubernetesDevices": zod.number().optional().describe('Number of monitored Kubernetes Nodes, Pods, and Services'), + "numberOfAllowedDTConfigs": zod.number().optional(), + "destroyAccount": zod.boolean().optional(), + "numOfAzureDevices": zod.number().optional().describe('Number of Azure resources not monitored with a local Collector'), + "numOfTerminatedGcpCloudDevices": zod.number().optional().describe('Number of terminated GCP resources'), + "numberOfLightDevices": zod.number().optional(), + "numberOfRootCauseAnalysisRules": zod.number().optional(), + "numberOfDevices": zod.number().optional().describe('Sum of numOfStandardDevices, numOfCombinedAWSDevices, numOfCombinedAzureDevices, and numOfCombinedGCPDevices'), + "numberOfPreviousDayAlerts": zod.number().optional(), + "numberOfWidgets": zod.number().optional(), + "numberOfAlertRules": zod.number().optional(), + "numOfStoppedAzureDevices": zod.number().optional().describe('Number of stopped Azure resources'), + "numOfServices": zod.number().optional().describe('Number of services (created via LM Service Insight)'), + "parentBilling": zod.string().optional(), + "numberOfStandardDevices": zod.number().optional().describe('Number of standard devices'), + "numberOfDashboards": zod.number().optional(), + "numOfCombinedGcpDevices": zod.number().optional().describe('Number of GCP resources monitored with a local Collector'), + "numOfGcpDevices": zod.number().optional().describe('Number of GCP resources'), + "numberOfDynamicThresholds": zod.number().optional(), + "timestampWindowOfApiUsersInSec": zod.number().optional(), + "zuora": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "numberOfDatasourceInstances": zod.number().optional(), + "numOfCombinedAzureDevices": zod.number().optional().describe('Number of Azure resources monitored with a local Collector'), + "numberOfApiUsers": zod.number().optional(), + "numberOfDataPoints": zod.number().optional(), + "numOfTerminatedAWSDevices": zod.number().optional().describe('Number of terminated AWS resources'), + "numberOfComplexDataPoints": zod.number().optional(), + "numberOfInstancesPerDS": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "numberOfSessionUsers": zod.number().optional(), + "numOfStoppedAWSDevices": zod.number().optional().describe('Number of stopped AWS resources'), + "numOfConfigSourceDevices": zod.number().optional().describe('Number of devices with active ConfigSources'), + "numOfWebsites": zod.number().optional().describe('Number of websites'), + "numberOfReportsInLast24Hrs": zod.number().optional(), + "numOfCombinedAWSDevices": zod.number().optional().describe('Number of AWS resources monitored with a local Collector') +}) + + +/** + * update opsnote + * @summary update opsnote + */ +export const patchOpsNoteByIdParams = zod.object({ + "id": zod.string() +}) + +export const patchOpsNoteByIdBody = zod.object({ + "note": zod.string().describe('The note message'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + +export const patchOpsNoteByIdResponse = zod.object({ + "note": zod.string().describe('The note message'), + "createdBy": zod.string().optional().describe('The user that created the Ops Note'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "id": zod.string().optional().describe('The id associated with the Ops Note'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + + +/** + * get opsnote by id + * @summary get opsnote by id + */ +export const getOpsNoteByIdParams = zod.object({ + "id": zod.string() +}) + +export const getOpsNoteByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getOpsNoteByIdResponse = zod.object({ + "note": zod.string().describe('The note message'), + "createdBy": zod.string().optional().describe('The user that created the Ops Note'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "id": zod.string().optional().describe('The id associated with the Ops Note'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + + +/** + * delete opsnote + * @summary delete opsnote + */ +export const deleteOpsNoteByIdParams = zod.object({ + "id": zod.string() +}) + +export const deleteOpsNoteByIdResponse = zod.object({ + +}) + + +/** + * update opsnote + * @summary update opsnote + */ +export const updateOpsNoteByIdParams = zod.object({ + "id": zod.string() +}) + +export const updateOpsNoteByIdBody = zod.object({ + "note": zod.string().describe('The note message'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + +export const updateOpsNoteByIdResponse = zod.object({ + "note": zod.string().describe('The note message'), + "createdBy": zod.string().optional().describe('The user that created the Ops Note'), + "scopes": zod.array(zod.object({ + "type": zod.string() +}).describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account')).optional().describe('The scopes associated with the note. Each scope has a type of device, service, deviceGroup or serviceGroup. A note with no scope will show up for everything in the account'), + "id": zod.string().optional().describe('The id associated with the Ops Note'), + "happenOnInSec": zod.number().optional().describe('The date and time associated with the note, in epoch seconds format'), + "tags": zod.array(zod.object({ + "updateOnInSec": zod.number().optional(), + "createdOnInSec": zod.number().optional(), + "name": zod.string().describe('release'), + "id": zod.string().optional() +}).describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag')).optional().describe('The tags that should be associated with the note. Each tag has a unique id and a name - you can either include the name of a new or existing tag, or the id of an existing tag') +}) + + +/** + * get SDT history for the website group (Response may contain extra fields depending upon the type of SDT) + * @summary get SDT history for the website group (Response may contain extra fields depending upon the type of SDT) + */ +export const getSDTHistoryByWebsiteGroupIdParams = zod.object({ + "id": zod.number() +}) + +export const getSDTHistoryByWebsiteGroupIdQuerySizeDefault = 50;export const getSDTHistoryByWebsiteGroupIdQueryOffsetDefault = 0; + +export const getSDTHistoryByWebsiteGroupIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getSDTHistoryByWebsiteGroupIdQuerySizeDefault), + "offset": zod.number().default(getSDTHistoryByWebsiteGroupIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTHistoryByWebsiteGroupIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * The template field works only for the POST API + * @summary update dashboard + */ +export const patchDashboardByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchDashboardByIdQueryParams = zod.object({ + "overwriteGroupFields": zod.boolean().optional() +}) + +export const patchDashboardByIdBody = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard') +}) + +export const patchDashboardByIdResponse = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "fullName": zod.string().optional().describe('Full name of the dashboard, including group path'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard'), + "overwriteGroupFields": zod.boolean().optional().describe('Overwrite existing Resource/Website Group fields with ##defaultResourceGroup## and/or ##defaultWebsiteGroup## tokens. This value of this attribute is only considered while updating the Dashboard configuration. While creating the new Dashboard, this value will always be considered as false irrespective of the passed value.'), + "id": zod.number().optional().describe('The Id of the dashboard'), + "groupFullPath": zod.string().optional().describe('The full path (excluding root group) of the group the dashboard belongs to') +}) + + +/** + * get dashboard + * @summary get dashboard + */ +export const getDashboardByIdParams = zod.object({ + "id": zod.number() +}) + +export const getDashboardByIdQueryParams = zod.object({ + "template": zod.boolean().optional(), + "format": zod.string().optional(), + "fields": zod.string().optional() +}) + +export const getDashboardByIdResponse = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "fullName": zod.string().optional().describe('Full name of the dashboard, including group path'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard'), + "overwriteGroupFields": zod.boolean().optional().describe('Overwrite existing Resource/Website Group fields with ##defaultResourceGroup## and/or ##defaultWebsiteGroup## tokens. This value of this attribute is only considered while updating the Dashboard configuration. While creating the new Dashboard, this value will always be considered as false irrespective of the passed value.'), + "id": zod.number().optional().describe('The Id of the dashboard'), + "groupFullPath": zod.string().optional().describe('The full path (excluding root group) of the group the dashboard belongs to') +}) + + +/** + * delete dashboard + * @summary delete dashboard + */ +export const deleteDashboardByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteDashboardByIdResponse = zod.object({ + +}) + + +/** + * The template field works only for the POST API + * @summary update dashboard + */ +export const updateDashboardByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateDashboardByIdQueryParams = zod.object({ + "overwriteGroupFields": zod.boolean().optional() +}) + +export const updateDashboardByIdBody = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard') +}) + +export const updateDashboardByIdResponse = zod.object({ + "owner": zod.string().optional().describe('This field will be empty unless the dashboard is a private dashboard, in which case the owner will be listed'), + "template": zod.object({ + +}).optional().describe('The template which is used for importing dashboard'), + "userPermission": zod.string().optional().describe('The permission of the user that made the API call'), + "groupId": zod.number().optional().describe('The id of the group the dashboard belongs to'), + "fullName": zod.string().optional().describe('Full name of the dashboard, including group path'), + "description": zod.string().optional().describe('The description of the dashboard'), + "sharable": zod.boolean().optional().describe('Whether or not the dashboard is sharable. This value will always be true unless the dashboard is a private dashboard'), + "widgetsConfig": zod.object({ + +}).optional().describe('Information about widget configuration used by the UI'), + "groupName": zod.string().optional().describe('The name of group where created dashboard will reside'), + "defaultDashboardFilters": zod.object({ + "defaultDashboardFilterDetails": zod.array(zod.object({ + "name": zod.string().optional(), + "alias": zod.string().optional(), + "label": zod.string().optional(), + "type": zod.string().optional() +})).optional() +}).optional().describe('this field will hold values for a dashboard filter on account level'), + "widgetTokens": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath for the widget token'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The widget token inherit list')).optional().describe('The widget token inherit list'), + "name": zod.string().optional().describe('This is the name of the parent group of devices, if there is one established'), + "type": zod.string().optional().describe('The values can be owned | inherit\nSpecifies the type of the widget'), + "value": zod.string().optional().describe('This is the name of the child group of devices, if there is one') +}).describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup')).optional().describe('If useDynamicWidget=true, this field must at least contain tokens defaultDeviceGroup and defaultServiceGroup'), + "name": zod.string().describe('The name of the dashboard'), + "overwriteGroupFields": zod.boolean().optional().describe('Overwrite existing Resource/Website Group fields with ##defaultResourceGroup## and/or ##defaultWebsiteGroup## tokens. This value of this attribute is only considered while updating the Dashboard configuration. While creating the new Dashboard, this value will always be considered as false irrespective of the passed value.'), + "id": zod.number().optional().describe('The Id of the dashboard'), + "groupFullPath": zod.string().optional().describe('The full path (excluding root group) of the group the dashboard belongs to') +}) + + +/** + * Retrieve the SDT (Service Disruption Time) history for a specific device dataSource + * @summary Get SDT history for the device dataSource + */ +export const getSDTHistoryByDeviceDataSourceIdParams = zod.object({ + "deviceId": zod.number(), + "id": zod.number() +}) + +export const getSDTHistoryByDeviceDataSourceIdQuerySizeDefault = 50;export const getSDTHistoryByDeviceDataSourceIdQueryOffsetDefault = 0; + +export const getSDTHistoryByDeviceDataSourceIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getSDTHistoryByDeviceDataSourceIdQuerySizeDefault), + "offset": zod.number().default(getSDTHistoryByDeviceDataSourceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getSDTHistoryByDeviceDataSourceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "duration": zod.number().optional().describe('The duration of the SDT, in minutes'), + "itemId": zod.number().optional().describe('The ID of the resource in SDT, e.g. the group or device in SDT'), + "approximateEndEpoch": zod.number().optional().describe('The end epoch for the SDT'), + "admin": zod.string().optional().describe('The user that added the SDT'), + "comment": zod.string().optional().describe('The comment associated with the SDT'), + "id": zod.string().optional().describe('The ID of the SDT'), + "type": zod.string().optional().describe('The SDT type'), + "approximateStartEpoch": zod.number().optional().describe('The start epoch for the SDT') +})).optional() +}) + + +/** + * Creates a new property rule in the system + * @summary Add a new property rule + */ +export const addPropertyRuleBody = zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + +export const addPropertyRuleResponse = zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +}) + + +/** + * Fetches a list of property rules + * @summary Get property rules list + */ +export const getPropertyRulesListQuerySizeDefault = 50;export const getPropertyRulesListQueryOffsetDefault = 0; + +export const getPropertyRulesListQueryParams = zod.object({ + "format": zod.string().optional(), + "fields": zod.string().optional(), + "size": zod.number().default(getPropertyRulesListQuerySizeDefault), + "offset": zod.number().default(getPropertyRulesListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getPropertyRulesListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "scheduleOption": zod.string().optional().describe('The property rule schedule option. The values can be onAP|onAPpropertyChanges'), + "groovyScript": zod.string().optional().describe('groovy script'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Access group Details in response'), + "description": zod.string().optional().describe('The property rule description'), + "appliesTo": zod.string().optional().describe('The property rule applies to'), + "linuxCmdline": zod.string().optional().describe('external linux script args'), + "lineageId": zod.string().optional().describe('LM module lineageId'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('LM module checksum'), + "id": zod.number().optional(), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The property rule group name'), + "windowsScript": zod.string().optional().describe('external windows script name'), + "dataType": zod.number().optional().describe('The data type of property source, default is 0. The values can be\n\n0: property source\n\n1: raw ERI\n\n '), + "technology": zod.string().optional().describe('The technology notes'), + "params": zod.array(zod.object({ + "propertyRuleId": zod.number().optional(), + "name": zod.string().optional(), + "comment": zod.string().optional(), + "id": zod.number().optional(), + "value": zod.string().optional() +})).optional(), + "version": zod.number().optional().describe('The property rule version'), + "windowsCmdline": zod.string().optional().describe('external windows script args'), + "tags": zod.string().optional().describe('The property rule tags'), + "auditVersion": zod.number().optional().describe('The property rule auditVersion'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "scriptType": zod.string().optional().describe('script type: embed | powershell | external'), + "name": zod.string().optional().describe('The property rule name'), + "interval": zod.number().optional().describe('The collect interval of raw ERI'), + "linuxScript": zod.string().optional().describe('external linux script name') +})).optional() +}) + + +/** + * Add a new property to a specific device + * @summary Add device property + */ +export const addDevicePropertyParams = zod.object({ + "deviceId": zod.number() +}) + +export const addDevicePropertyBody = zod.object({ + +}) + +export const addDevicePropertyResponse = zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +}) + + +/** + * Retrieve a paginated list of properties for a specific device + * @summary Get device properties + */ +export const getDevicePropertyListParams = zod.object({ + "deviceId": zod.number() +}) + +export const getDevicePropertyListQuerySizeDefault = 50;export const getDevicePropertyListQueryOffsetDefault = 0; + +export const getDevicePropertyListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getDevicePropertyListQuerySizeDefault), + "offset": zod.number().default(getDevicePropertyListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getDevicePropertyListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "inheritList": zod.array(zod.object({ + "fullpath": zod.string().optional().describe('The fullpath of the property'), + "id": zod.number().optional().describe('Source id for the property. For example: group id or property rule'), + "type": zod.string().optional().describe('The parent property type from which it is inheriting'), + "value": zod.string().optional().describe('The property value for the group') +}).describe('The inherit list of the property')).optional().describe('The inherit list of the property'), + "name": zod.string().optional().describe('The name of the property'), + "type": zod.string().optional().describe('The type of property. The values can be Inherit|System|Custom'), + "value": zod.string().optional().describe('The value of the property') +})).optional() +}) + + +/** + * Add TopologySource + * @summary Add TopologySource + */ +export const addTopologySourceBody = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "name": zod.string().describe('The TopologySource name'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + +export const addTopologySourceResponse = zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +}) + + +/** + * Get TopologySource List + * @summary Get TopologySource List + */ +export const getTopologySourceListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).and(zod.object({ + "groovyScript": zod.string().optional().describe('groovy script'), + "manualConnections": zod.string().optional().describe('manual'), + "scriptType": zod.string().optional().describe('script type: embed | file | powershell'), + "windowsScript": zod.string().optional().describe('windows script'), + "linuxCmdline": zod.string().optional().describe('linux script command line'), + "linuxScript": zod.string().optional().describe('linux script'), + "windowsCmdline": zod.string().optional().describe('windows script command line'), + "properties": zod.string().optional().describe('property based') +})).describe('collector\'s attributes to collect topologies'), + "collectionMethod": zod.string().describe('The topology will be build on properties or traditional way, default \'script\''), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The TopologySource version'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The TopologySource audit Version'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.union([zod.literal(1800),zod.literal(3600),zod.literal(14400),zod.literal(43200)]).optional().describe('The TopologySource data collect interval in seconds, default 3600'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "name": zod.string().describe('The TopologySource name'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in') +})).optional() +}) + + +/** + * Retrieves the update history for a specific datasource + * @summary Get update history for a datasource + */ +export const getUpdateReasonListByDataSourceIdParams = zod.object({ + "id": zod.number() +}) + +export const getUpdateReasonListByDataSourceIdQuerySizeDefault = 50;export const getUpdateReasonListByDataSourceIdQueryOffsetDefault = 0; + +export const getUpdateReasonListByDataSourceIdQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getUpdateReasonListByDataSourceIdQuerySizeDefault), + "offset": zod.number().default(getUpdateReasonListByDataSourceIdQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getUpdateReasonListByDataSourceIdResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "timeEpoch": zod.number().optional().describe('Update date epoch'), + "clientIp": zod.string().optional().describe('Client IP from which this update has been made'), + "updateReason": zod.string().optional().describe('Update reason'), + "timeStr": zod.string().optional().describe('Update date in form \'YYYY-MM-DD HH:MM:SS\''), + "id": zod.number().optional().describe('ID of update reason'), + "userName": zod.string().optional().describe('User who made this update') +})).optional() +}) + + +/** + * add website group + * @summary add website group + */ +export const addWebsiteGroupBody = zod.object({ + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "name": zod.string().describe('The name of the group'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + +export const addWebsiteGroupResponse = zod.object({ + "fullPath": zod.string().optional().describe('The full path of the group'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request. The values can be write|read|ack'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "hasWebsitesDisabled": zod.boolean().optional().describe('Indicates if there are websites disabled in this group'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "rolePrivileges": zod.array(zod.string().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold')).optional().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "numOfDirectWebsites": zod.number().optional().describe('The number of direct websites in this group'), + "name": zod.string().describe('The name of the group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of direct website groups in this group (excluding those in subgroups)'), + "id": zod.number().optional().describe('The Id of the group'), + "numOfWebsites": zod.number().optional().describe('The number of websites in the service group, including the websites in sub groups'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +}) + + +/** + * get website group list + * @summary get website group list + */ +export const getWebsiteGroupListQuerySizeDefault = 50;export const getWebsiteGroupListQueryOffsetDefault = 0; + +export const getWebsiteGroupListQueryParams = zod.object({ + "fields": zod.string().optional(), + "size": zod.number().default(getWebsiteGroupListQuerySizeDefault), + "offset": zod.number().default(getWebsiteGroupListQueryOffsetDefault), + "filter": zod.string().optional() +}) + +export const getWebsiteGroupListResponse = zod.object({ + "total": zod.number().optional(), + "searchId": zod.string().optional(), + "items": zod.array(zod.object({ + "fullPath": zod.string().optional().describe('The full path of the group'), + "stopMonitoring": zod.boolean().optional().describe('The values can be true|false where\ntrue: monitoring is disabled for the websites in the group\nfalse: monitoring is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request. The values can be write|read|ack'), + "testLocation": zod.object({ + "all": zod.boolean().optional().describe('This field only for the SiteMonitor Groups, does not include Internal Service Groups'), + "collectorIds": zod.array(zod.number().describe('The Internal Service Groups Ids')).optional().describe('The Internal Service Groups Ids'), + "collectors": zod.array(zod.object({ + "hostname": zod.string().optional().describe('The hostname of the collector'), + "collectorGroupName": zod.string().optional().describe('The group name of the group the collector is present in'), + "collectorGroupId": zod.number().optional().describe('The group Id of the group the collector is present in'), + "description": zod.string().optional().describe('The description of the collector'), + "id": zod.number().optional().describe('The collector id'), + "status": zod.string().optional().describe('The status of the collector') +}).describe('The collector info of the services')).optional().describe('The collector info of the services'), + "smgIds": zod.array(zod.number().describe('The SiteMonitor Groups Ids')).optional().describe('The SiteMonitor Groups Ids') +}).optional().describe('The locations from which the website is monitored. If the website is internal, this field should include Collectors. If Non-Internal, possible test locations are:\n1 : US - LA\n2 : US - DC\n3 : US - SF\n4 : Europe - Dublin\n5 : Asia - Singapore\n6 : Australia - Sydney\ntestLocation:\"{all:true}\" indicates that the service will be monitored from all checkpoint locations\ntestLocation:\"{smgIds:[1,2,3]}\" indicates that the service will be monitored from checkpoint locations 1, 2 and 3\ntestLocation:\"{collectorIds:[85,90]}\" indicates that the service will be monitored by Collectors 85 and 90'), + "hasWebsitesDisabled": zod.boolean().optional().describe('Indicates if there are websites disabled in this group'), + "description": zod.string().optional().describe('The description of the group'), + "disableAlerting": zod.boolean().optional().describe('The values can be true|false where\ntrue: alerting is disabled for the websites in the group\nfalse: alerting is enabled for the websites in the group\nIf stopMonitoring=true, then alerting will also be disabled by default for the websites in the group'), + "rolePrivileges": zod.array(zod.string().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold')).optional().describe('The privilege operations of the user\'s role that made the API request. The array can contain the values ack, sdt and/or threshold'), + "parentId": zod.number().optional().describe('The Id of the parent group. If parentId=1 then the group exists under the root group'), + "numOfDirectWebsites": zod.number().optional().describe('The number of direct websites in this group'), + "name": zod.string().describe('The name of the group'), + "numOfDirectSubGroups": zod.number().optional().describe('The number of direct website groups in this group (excluding those in subgroups)'), + "id": zod.number().optional().describe('The Id of the group'), + "numOfWebsites": zod.number().optional().describe('The number of websites in the service group, including the websites in sub groups'), + "properties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The website folder properties') +})).optional() +}) + + +/** + * update device instance + * @summary update device instance + */ +export const patchDeviceDatasourceInstanceByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const patchDeviceDatasourceInstanceByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const patchDeviceDatasourceInstanceByIdBody = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used') +}) + +export const patchDeviceDatasourceInstanceByIdResponse = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +}) + + +/** + * get device instance + * @summary get device instance + */ +export const getDeviceDatasourceInstanceByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const getDeviceDatasourceInstanceByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getDeviceDatasourceInstanceByIdResponse = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +}) + + +/** + * delete a device instance + * @summary delete a device instance + */ +export const deleteDeviceDatasourceInstanceByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const deleteDeviceDatasourceInstanceByIdResponse = zod.object({ + +}) + + +/** + * update device instance + * @summary update device instance + */ +export const updateDeviceDatasourceInstanceByIdParams = zod.object({ + "deviceId": zod.number(), + "hdsId": zod.number().describe('The device-datasource ID'), + "id": zod.number() +}) + +export const updateDeviceDatasourceInstanceByIdQueryParams = zod.object({ + "opType": zod.string().optional() +}) + +export const updateDeviceDatasourceInstanceByIdBody = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used') +}) + +export const updateDeviceDatasourceInstanceByIdResponse = zod.object({ + "isUNCInstance": zod.boolean().optional().describe('Whether or not UNC Monitoring enabled for device'), + "stopMonitoring": zod.boolean().optional().describe('Whether or not monitoring is disabled for the instance'), + "deviceDataSourceId": zod.number().optional().describe('The id of the unique device-datasource the instance is associated with'), + "displayName": zod.string().describe('The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination'), + "wildValue2": zod.string().optional().describe('Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination'), + "groupId": zod.number().optional().describe('The id of the instance group associated with the datasource instance'), + "description": zod.string().optional().describe('The description of the datasource instance'), + "collectorId": zod.number().optional().describe('The id of the collector the datasource instance is associated with'), + "disableAlerting": zod.boolean().optional().describe('Whether or not alerting is disabled for the instance'), + "deviceId": zod.number().optional().describe('The id of the device the datasource instance is associated with'), + "deviceDisplayName": zod.string().optional().describe('The display name of the device the datasource instance is associated with'), + "systemProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level system properties assigned to the instance'), + "autoProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level auto properties assigned to the instance'), + "dataSourceId": zod.number().optional().describe('The id of the datasource definition that the instance represents'), + "groupName": zod.string().optional().describe('The name of the instance group associated with the datasource instance'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('Any instance level properties assigned to the instance'), + "lockDescription": zod.boolean().optional().describe('Whether or not Active Discovery is enabled, and thus whether or not the instance description is editable'), + "name": zod.string().optional().describe('The name of the datasource instance, in the format of: datasourceName-instanceAlias'), + "id": zod.number().optional().describe('The Id of the datasource instance'), + "wildValue": zod.string().describe('The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used'), + "dataSourceType": zod.string().optional().describe('The type of LogicModule, e.g. DS (datasource)') +}) + + +/** + * Update the details of a specific collector group by its ID + * @summary Update collector group + */ +export const patchCollectorGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const patchCollectorGroupByIdQueryParams = zod.object({ + "autoBalanceMonitoredDevices": zod.boolean().optional(), + "forceUpdateFailedOverDevices": zod.boolean().optional(), + "opType": zod.string().optional() +}) + +export const patchCollectorGroupByIdBody = zod.object({ + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy') +}) + +export const patchCollectorGroupByIdResponse = zod.object({ + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request'), + "numOfCollectors": zod.number().optional().describe('The number of collectors that belong to the group'), + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "highestPriorityCollectorStatus": zod.object({ + "inSDT": zod.boolean().optional().describe('The SDT status of the highest priority sub collector'), + "acked": zod.boolean().optional().describe('The acked status of the highest priority sub collector'), + "isDown": zod.boolean().optional().describe('The down status of the highest priority sub collector'), + "status": zod.number().optional().describe('The status of the highest priority sub collector') +}).optional().describe('The status of the highest priority sub collector'), + "platform": zod.string().optional().describe('The platform limitation'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "numOfHosts": zod.number().optional().describe('The number of hosts that belong to the group'), + "numOfInstances": zod.number().optional().describe('The number of instances that belong to the group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy'), + "createOn": zod.number().optional().describe('The time at which the group was created in epoch format'), + "id": zod.number().optional().describe('The id of the Collector Group'), + "mismatchVersion": zod.boolean().optional().describe('Specifies if the version of all collectors in group is same') +}) + + +/** + * Retrieve details of a specific collector group by its ID + * @summary Get collector group + */ +export const getCollectorGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const getCollectorGroupByIdQueryParams = zod.object({ + "fields": zod.string().optional() +}) + +export const getCollectorGroupByIdResponse = zod.object({ + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request'), + "numOfCollectors": zod.number().optional().describe('The number of collectors that belong to the group'), + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "highestPriorityCollectorStatus": zod.object({ + "inSDT": zod.boolean().optional().describe('The SDT status of the highest priority sub collector'), + "acked": zod.boolean().optional().describe('The acked status of the highest priority sub collector'), + "isDown": zod.boolean().optional().describe('The down status of the highest priority sub collector'), + "status": zod.number().optional().describe('The status of the highest priority sub collector') +}).optional().describe('The status of the highest priority sub collector'), + "platform": zod.string().optional().describe('The platform limitation'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "numOfHosts": zod.number().optional().describe('The number of hosts that belong to the group'), + "numOfInstances": zod.number().optional().describe('The number of instances that belong to the group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy'), + "createOn": zod.number().optional().describe('The time at which the group was created in epoch format'), + "id": zod.number().optional().describe('The id of the Collector Group'), + "mismatchVersion": zod.boolean().optional().describe('Specifies if the version of all collectors in group is same') +}) + + +/** + * Delete a specific collector group by its ID + * @summary Delete collector group + */ +export const deleteCollectorGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const deleteCollectorGroupByIdResponse = zod.object({ + +}) + + +/** + * Update the details of a specific collector group by its ID + * @summary Update collector group + */ +export const updateCollectorGroupByIdParams = zod.object({ + "id": zod.number() +}) + +export const updateCollectorGroupByIdQueryParams = zod.object({ + "autoBalanceMonitoredDevices": zod.boolean().optional(), + "forceUpdateFailedOverDevices": zod.boolean().optional(), + "opType": zod.string().optional() +}) + +export const updateCollectorGroupByIdBody = zod.object({ + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy') +}) + +export const updateCollectorGroupByIdResponse = zod.object({ + "userPermission": zod.string().optional().describe('The permission level of the user that made the API request'), + "numOfCollectors": zod.number().optional().describe('The number of collectors that belong to the group'), + "autoBalanceInstanceCountThreshold": zod.number().optional().describe('Threshold for instance count strategy to check if a collector has high load'), + "description": zod.string().optional().describe('The description of the collector group'), + "highestPriorityCollectorStatus": zod.object({ + "inSDT": zod.boolean().optional().describe('The SDT status of the highest priority sub collector'), + "acked": zod.boolean().optional().describe('The acked status of the highest priority sub collector'), + "isDown": zod.boolean().optional().describe('The down status of the highest priority sub collector'), + "status": zod.number().optional().describe('The status of the highest priority sub collector') +}).optional().describe('The status of the highest priority sub collector'), + "platform": zod.string().optional().describe('The platform limitation'), + "autoBalance": zod.boolean().optional().describe('Whether the collector has autoBalance set as true or false'), + "customProperties": zod.array(zod.object({ + "name": zod.string().describe('The name of a property'), + "value": zod.string().describe('The value of a property') +}).describe('The properties associated with the website')).optional().describe('The custom properties defined for the collector group'), + "numOfHosts": zod.number().optional().describe('The number of hosts that belong to the group'), + "numOfInstances": zod.number().optional().describe('The number of instances that belong to the group'), + "calThreshold": zod.number().optional().describe('calculated threshold value for a ABCG collector to check if a collector has high load'), + "name": zod.string().describe('The name of the Collector Group'), + "autoBalanceStrategy": zod.string().optional().describe('The auto balance strategy'), + "createOn": zod.number().optional().describe('The time at which the group was created in epoch format'), + "id": zod.number().optional().describe('The id of the Collector Group'), + "mismatchVersion": zod.boolean().optional().describe('Specifies if the version of all collectors in group is same') +}) + + +/** + * Import a ConfigSource using json data + * @summary Import ConfigSource via json + */ +export const importConfigSourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importConfigSourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importConfigSourceJsonResponse = zod.object({ + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The ConfigSource display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().optional().describe('The method to collect data'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}).optional(), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}).optional(), + "configChecks": zod.array(zod.object({ + "ackClearAlert": zod.boolean().optional().describe('Clear alert after ACKED or not'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "name": zod.string().optional().describe('The ConfigCheck name'), + "alertLevel": zod.number().optional().describe('The triggered alert level if config check failure.\nThe values can be 1|2|3|4\nwhere, 1: no alert, 2: warn alert, 3: error alert, 4: critical alert'), + "description": zod.string().optional().describe('The ConfigCheck description'), + "configSourceId": zod.number().optional().describe('The ConfigSource id'), + "id": zod.number().optional().describe('The ConfigCheck id'), + "type": zod.string().optional().describe('The ConfigCheck type. The values can be fetch|ignore|missing|value|groovy'), + "alertEffectiveIval": zod.number().optional().describe('Alert effective interval'), + "script": zod.object({ + "empty": zod.boolean().optional() +}).optional().describe('The alert external ticket urls'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for these many poll cycles before it will be triggered') +}).describe('The List of ConfigChecks')).optional().describe('The List of ConfigChecks'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable active discovery if ConfigSource has multiple instances. true|false'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The ConfigSource version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The ConfigSource audit version'), + "hasMultiInstances": zod.boolean().optional().describe('Whether the ConfigSource has multiple instances. true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "collectInterval": zod.number().optional().describe('The ConfigSource data collect interval'), + "name": zod.string().optional().describe('The config source name'), + "timestampFormat": zod.string().optional().describe('Timestamp format. ex. yyyy-MM-dd hh:mm:ss'), + "fileFormat": zod.string().optional().describe('Configuration file format. The values can be arbitrary|unix|java-properties|JSON|XML') +}) + + +/** + * Import a DataSource using json data + * @summary Import DataSource via json + */ +export const importDataSourceJsonQueryParams = zod.object({ + "handleConflict": zod.string().optional(), + "fieldsToPreserve": zod.array(zod.string()).optional() +}) + +export const importDataSourceJsonBody = zod.object({ + "file": zod.object({ + "fileName": zod.string().optional(), + "modificationDate": zod.iso.datetime({}).optional(), + "size": zod.number().optional(), + "readDate": zod.iso.datetime({}).optional(), + "name": zod.string().optional(), + "type": zod.string().optional(), + "creationDate": zod.iso.datetime({}).optional(), + "parameters": zod.record(zod.string(), zod.string()).optional() +}).optional() +}) + +export const importDataSourceJsonResponse = zod.object({ + "eriDiscoveryConfig": zod.object({ + "winScript": zod.string().optional().describe('The Windows script'), + "groovyScript": zod.string().optional().describe('The Groovy script'), + "name": zod.string().describe('ERI detection name'), + "type": zod.string().optional().describe('The script type'), + "linuxCmdline": zod.string().optional().describe('The Linux script command line'), + "linuxScript": zod.string().optional().describe('The Linux script file'), + "winCmdline": zod.string().optional().describe('The Windows script command line') +}).optional().describe('Enable ERI Discovery or not'), + "accessGroups": zod.array(zod.object({ + "createdBy": zod.string().optional().describe('User who created access group'), + "name": zod.string().describe('The name of the access group'), + "tenantId": zod.string().optional().describe('Tenancy details'), + "description": zod.string().optional().describe('Description about access group'), + "id": zod.number().optional().describe('The id of the access group'), + "updatedOn": zod.number().optional().describe('Time when access group updated'), + "createdOn": zod.number().optional().describe('Time when access group created') +}).describe('Module\'s access groups')).optional().describe('Module\'s access groups'), + "displayName": zod.string().optional().describe('The data source display name'), + "description": zod.string().optional().describe('The description for the LMModule'), + "appliesTo": zod.string().optional().describe('The Applies To for the LMModule'), + "lineageId": zod.string().optional().describe('The lineageId the LMModule belongs to'), + "collectMethod": zod.string().describe('The method to collect data. The values can be snmp|ping|exs|webpage|wmi|cim|datadump|dns|ipmi|jdbb|script|udp|tcp|xen'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from, including this field will set this as the module\'s import base and mark the ID\'s version as audited'), + "checksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "dataPoints": zod.array(zod.object({ + "alertForNoData": zod.number().optional().describe('The triggered alert level if we cannot collect data for this datapoint. The values can be 0-4 (0:unused alert, 1:alert ok, 2:warn alert, 2:error alert, 4:critical alert)'), + "postProcessorMethod": zod.string().optional().describe('The post processor method for the data value. Currently support complex expression and groovy.'), + "postProcessorParam": zod.string().optional().describe('The post processor parameter, e.g. dataPoint1*2'), + "maxDigits": zod.number().optional().describe('The max digits of the data value'), + "rawDataFieldName": zod.string().optional().describe('The name of the raw data field name used to fetch value, e.g. avgrtt, output'), + "description": zod.string().optional().describe('The datapoint description'), + "alertClearTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before the alert will be cleared'), + "userParam3": zod.string().optional().describe('The third user parameter will be used to fetch the datapoint value. '), + "userParam2": zod.string().optional().describe('The second user parameter will be used to fetch the datapoint value. e.g. jmx attribute name'), + "type": zod.number().optional().describe('The data metric type. The values can be 0-7 (0:unknown, 1:counter, 2:gauge, 3:derive, 5:status, 6:compute, 7:counter32, 8:counter64)'), + "dataSourceId": zod.number().optional().describe('The datasource id'), + "minValue": zod.string().optional().describe('The minimum value of the datapoint value range'), + "alertBody": zod.string().optional().describe('The customized alert message body define. Empty string mean we will use the define in default template'), + "originId": zod.string().optional().describe('Portable id for origin tracking'), + "userParam1": zod.string().optional().describe('The first user parameter will be used to fetch the datapoint value. e.g. snmp oid'), + "alertSubject": zod.string().optional().describe('The customized alert message subject define. Empty string mean we will use the define in default template'), + "id": zod.number().optional().describe('The datapoint id'), + "alertTransitionInterval": zod.number().optional().describe('The count that the alert must exist for this many poll cycles before it will be triggered'), + "enableAnomalyAlertSuppression": zod.string().optional().describe('Expression of anomaly detection setting, split by comma\n0 means off, 1 means on, -1 means invalid\n1,0,1 = warn : ON error: OFF critical: ON\nEmpty value on this parameter means : 0,0,0'), + "maxValue": zod.string().optional().describe('The max value of the datapoint value range'), + "dataType": zod.number().optional().describe('The data value type. The values can be 1-8 (1:boolean, 2:byte, 3:short, 4:int, 5:long, 6:float, 7:double, 8:ulong)'), + "criticalAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for CRITICAL severity'), + "alertExprNote": zod.string().optional().describe('alert expression note'), + "adAdvSettingEnabled": zod.boolean().optional().describe('The AD advance setting enable flag'), + "errorAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for ERROR severity'), + "warnAdAdvSetting": zod.string().optional().describe('Enable anomaly detection advance setting for WARN severity'), + "name": zod.string().describe('The datapoint name'), + "statusDisplayNames": zod.array(zod.object({ + "statusDisplayName": zod.string().describe('The status display name for the metric value'), + "metricValue": zod.string().describe('The metric value that the alert must be greater than, less than, or equal to for this status display to be considered'), + "id": zod.number().optional().describe('The datapoint id'), + "datapointId": zod.number().optional().describe('The datappoint id'), + "operator": zod.string().describe('The operator to use for the status display') +}).describe('The status display name list')).optional().describe('The status display name list'), + "alertExpr": zod.string().optional().describe('The alert threshold define for the datapoint. e.g. \'> 60 80 90\' mean it will: \ntrigger warn alert if value > 60\ntrigger error alert if value > 80\ntrigger critical alert if value > 90') +}).describe('The data point list')).optional().describe('The data point list'), + "id": zod.number().optional().describe('The ID of the LMModule'), + "accessGroupIds": zod.array(zod.number().describe('The Access Groups Id\'s')).optional().describe('The Access Groups Id\'s'), + "group": zod.string().optional().describe('The group the LMModule is in'), + "collectorAttribute": zod.object({ + "name": zod.string().describe('The data collector\'s name') +}), + "autoDiscoveryConfig": zod.object({ + "persistentInstance": zod.boolean().optional().describe('Persist discovered instance'), + "scheduleInterval": zod.number().optional().describe('Auto discovery schedule interval in minutes. 0 means host or data source changed. The values can be 0|15|60|1440'), + "deleteInactiveInstance": zod.boolean().optional().describe('Delete inactive instance'), + "method": zod.object({ + "name": zod.string().describe('The auto discovery method name. \nThe values can be ad_cim|ad_cloudwatch|ad_collector|ad_dummy|ad_ec2|ad_esx|ad_http|ad_ipmi|ad_jdbc|ad_jmx|ad_netapp|ad_pdh|ad_port|ad_script|ad_snmp|ad_wmi|ad_xen|ad_azurerediscache|ad_awsserviceregion|ad_awsec2reservedinstance|ad_awsecsservice|ad_awsec2scheduledevents|ad_azureserviceregion|ad_azuresubscription|ad_azurebackupjob|ad_azuresdk|ad_azurewebjob|ad_awsbillingreport|ad_awselasticache|ad_awsredshift|ad_azurebilling|ad_awslbtargetgroups|ad_gcpappengine|ad_gcpbilling|ad_awsvpntunnel|ad_gcpvpntunnel|ad_awsglobalwebacl|ad_gcplbbackendservice|ad_gcppubsubsubscription|ad_gcppubsubsnapshot|ad_azurereplicationjob|ad_azureexpressroutecircuitpeering|ad_awsapigatewaystage|ad_azureautomationaccountcertificate|ad_azurevngconnection|ad_azurewebappinstance|ad_azureappserviceenvironmentmultirolepool|ad_openmetrics|ad_awsmediaconnectoutput|ad_awsmediaconnectsource|ad_awswebaclwafv2|ad_saaso365sharepointsite|ad_awscognitoidentityproviders|ad_saaszoomplanusage|ad_saasstatus|ad_azuresynapse|ad_saasairbrake|ad_syntheticsselenium|ad_azurevirtualdesktopsessionhosts|ad_saaso365subscribedsku|ad_azuredimension|ad_azurecostmanagementdimensions|ad_saaso365servicehealth|ad_saaso365mailbox|ad_azurenetappvolumes|ad_azureloganalyticsworkspaces|ad_saaszoomstatus|ad_saassalesforcelicense|ad_saaszoomroom|ad_saaswebexlicenseusage|ad_azureloganalyticsreplicationjob|ad_paasjsonpath|ad_awsrabbitmqqueue|ad_awssagemakerendpointvariant|ad_awsroute53resolveripaddress|ad_saasopenaiusagecost|ad_saasopenaiusagecompletion|ad_saasopenaiusageimage') +}).describe('Method used to do auto discovery instance'), + "instanceAutoGroupMethod": zod.string().optional().describe('Auto group method. The values can be none|netscaler|netscalerservicegroup|regex|esx|ilp'), + "instanceAutoGroupMethodParams": zod.string().optional().describe('Auto group method\'s parameters'), + "filters": zod.array(zod.object({ + "comment": zod.string().optional().describe('The filter comment'), + "attribute": zod.string().describe('Attribute to filter'), + "operation": zod.string().describe('The filter\'s operation. The values can be : Equal|NotEqual|GreaterThan|GreaterEqual|LessThan|LessEqual|Contain|NotContain|NotExist|RegexMatch|RegexNotMatch'), + "value": zod.string().optional().describe('The operation value') +})).optional(), + "disableInstance": zod.boolean().optional().describe('Disable discovered instance'), + "showDeletedInstanceDays": zod.number().optional().describe('show deleted instance days') +}).optional().describe('Auto discovery configuration'), + "adParameters": zod.unknown().optional(), + "payloadVersion": zod.number().optional().describe('The DataSource payload version for custom metrics'), + "useWildValueAsUUID": zod.boolean().optional().describe('Use wild-value as unique identifier in case of multi instance datasource: true|false'), + "enableAutoDiscovery": zod.boolean().optional().describe('Enable Auto Discovery or not when this data source has multi instance: false|true'), + "technology": zod.string().optional().describe('The Technical Notes for the LMModule'), + "version": zod.number().optional().describe('The data source version'), + "tags": zod.string().optional().describe('The Tags for the LMModule'), + "auditVersion": zod.number().optional().describe('The data source audit version'), + "hasMultiInstances": zod.boolean().optional().describe('If the DataSource has multi instance: true|false'), + "installationMetadata": zod.object({ + "targetLastPublishedId": zod.string().optional().describe('Specifies the target last published Id'), + "targetLastPublishedChecksum": zod.string().optional().describe('The metadata checksum for the target last published LMModule content'), + "targetLastPublishedVersion": zod.string().optional().describe('Specifies the target last published version'), + "originChecksum": zod.string().optional().describe('The metadata checksum for the LMModule content'), + "originAuthorNamespace": zod.string().optional().describe('Specifies the origin Author companies namespace'), + "originLocator": zod.string().optional().describe('Specifies the origin version locator'), + "isChangedFromOrigin": zod.boolean().optional().describe('Specifies if the Applies To function is changed from origin or not'), + "auditedRegistryId": zod.string().optional().describe('Specifies the audited registry Id'), + "targetLineageId": zod.string().optional().describe('Specifies the target lineage Id'), + "logicModuleType": zod.enum(['DATASOURCE', 'EVENTSOURCE', 'JOBMONITOR', 'APPLIESTO_FUNCTION', 'SNMP_SYSOID_MAP', 'PROPERTYSOURCE', 'CONFIGSOURCE', 'TOPOLOGYSOURCE', 'LOGSOURCE', 'DIAGNOSTICSOURCE']).optional().describe('The values can be DataSources | EventSources | PropertySources | ConfigSources | LogSources | TopologySources | Jobmonitors | AppliesTo Functions | SNMP SysOID Maps\nThe type of LogicModule'), + "isChangedFromTargetLastPublished": zod.boolean().optional().describe('Specifies if the Applies To function is changed from target last published or not'), + "originLineageId": zod.string().optional().describe('The origin lineage Id of the LMmodule'), + "originAuthorCompanyUUID": zod.string().optional().describe('Specifies the origin Author companies unique Id'), + "localModuleId": zod.number().optional().describe('The LocalModule Id'), + "originRegistryId": zod.string().optional().describe('The Registry ID of the Exchange Integration this module is based from'), + "originVersion": zod.string().optional().describe('Specifies the origin version'), + "auditedVersion": zod.string().optional().describe('Specifies the audited registry version'), + "originName": zod.string().optional().describe('Specifies the origin module name') +}).optional().describe('The local module\'s IntegrationMetadata, readable for troubleshooting purposes'), + "eriDiscoveryInterval": zod.number().optional().describe('The DataSource data collect interval'), + "enableEriDiscovery": zod.boolean().optional().describe('Enable ERI Discovery or not: false|true'), + "collectInterval": zod.number().describe('The DataSource data collect interval'), + "name": zod.string().describe('The data source name') +}) diff --git a/docs/swagger.json b/src/schemas/swagger.json similarity index 100% rename from docs/swagger.json rename to src/schemas/swagger.json diff --git a/src/schemas/zodToJsonSchema.ts b/src/schemas/zodToJsonSchema.ts new file mode 100644 index 0000000..6689269 --- /dev/null +++ b/src/schemas/zodToJsonSchema.ts @@ -0,0 +1,124 @@ +/** + * Flattens a discriminated union JSON Schema for better MCP Inspector display + * Converts anyOf structures into flat object schemas with all parameters visible + */ + +/** + * Flattens a JSON Schema that has anyOf at the root (discriminated union) + * @param schema - JSON Schema with anyOf at root + * @returns Flattened JSON Schema with all properties visible + */ +export function flattenDiscriminatedUnion(schema: Record): Record { + // If no anyOf, return as-is + if (!schema.anyOf || !Array.isArray(schema.anyOf)) { + return schema; + } + + const anyOf = schema.anyOf as Array>; + + // Find the discriminator field by looking at the first branch + let discriminatorField = 'operation'; // default + const firstBranch = anyOf[0]; + if (firstBranch.properties && typeof firstBranch.properties === 'object') { + const props = firstBranch.properties as Record; + // Find the field with const value (discriminator) + for (const [key, value] of Object.entries(props)) { + if (typeof value === 'object' && value !== null && 'const' in value) { + discriminatorField = key; + break; + } + } + } + + // Collect all unique properties and their schemas from all branches + const allProperties: Record = {}; + const discriminatorValues: string[] = []; + const requiredFields = new Set(); + + // Helper function to process a branch (handles nested unions) + const processBranch = (branch: Record) => { + // Check if this branch is itself a nested union + if (branch.anyOf && Array.isArray(branch.anyOf)) { + // Recursively process nested union branches + for (const nestedBranch of branch.anyOf as Array>) { + processBranch(nestedBranch); + } + return; + } + + if (branch.properties && typeof branch.properties === 'object') { + const props = branch.properties as Record; + + // Extract discriminator value + const discriminatorProp = props[discriminatorField]; + if (typeof discriminatorProp === 'object' && discriminatorProp !== null && 'const' in discriminatorProp) { + discriminatorValues.push(discriminatorProp.const as string); + } + + // Merge all properties + for (const [key, value] of Object.entries(props)) { + if (key === discriminatorField) { + // Handle discriminator specially - convert to enum + continue; + } + + if (allProperties[key]) { + // Property exists in multiple branches - merge schemas + const existing = allProperties[key] as Record; + const newSchema = value as Record; + + // If schemas are different, use anyOf to combine them + if (JSON.stringify(existing) !== JSON.stringify(newSchema)) { + allProperties[key] = { + anyOf: [ + ...(existing.anyOf ? (existing.anyOf as unknown[]) : [existing]), + newSchema + ] + }; + } + } else { + // New property - add it + allProperties[key] = value; + } + } + + // Track required fields from this branch + if (branch.required && Array.isArray(branch.required)) { + for (const field of branch.required) { + if (field === discriminatorField) { + requiredFields.add(field); + } + } + } + } + }; + + // Process all branches + for (const branch of anyOf) { + processBranch(branch); + } + + // Create the discriminator property with enum (deduplicated) + allProperties[discriminatorField] = { + type: 'string', + enum: Array.from(new Set(discriminatorValues)), + description: 'The operation to perform on the resource' + }; + + // Build the flattened schema + const flatSchema: Record = { + type: 'object', + properties: allProperties, + required: Array.from(requiredFields) + }; + + // Preserve other top-level properties from original schema + for (const [key, value] of Object.entries(schema)) { + if (key !== 'anyOf' && key !== 'type' && key !== 'properties' && key !== 'required') { + flatSchema[key] = value; + } + } + + return flatSchema; +} + diff --git a/src/server.ts b/src/server.ts index ea28333..245a8b9 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,10 +1,9 @@ +import { Writable } from 'node:stream'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { CallToolRequestSchema, - ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, - TextContent, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js'; @@ -12,23 +11,35 @@ import winston from 'winston'; import { APP_DESCRIPTION, APP_NAME, APP_VERSION } from './appInfo.js'; import { LogicMonitorClient } from './api/client.js'; import { LogicMonitorApiError } from './api/errors.js'; -import { resourceTools } from './tools/resourceTools.js'; import { listPrompts, getPrompt, getPromptContent } from './tools/prompts.js'; import { SessionManager } from './session/sessionManager.js'; import { metricsManager } from './metrics/metricsManager.js'; import { getKnownFields, ResourceKey } from './utils/fieldMetadata.js'; -import { DeviceHandler } from './resources/device/DeviceHandler.js'; -import { DeviceGroupHandler } from './resources/deviceGroup/DeviceGroupHandler.js'; -import { AlertHandler } from './resources/alert/AlertHandler.js'; -import { WebsiteHandler } from './resources/website/WebsiteHandler.js'; -import { WebsiteGroupHandler } from './resources/websiteGroup/WebsiteGroupHandler.js'; -import { CollectorHandler } from './resources/collector/CollectorHandler.js'; -import { UserHandler } from './resources/user/UserHandler.js'; -import { DashboardHandler } from './resources/dashboard/DashboardHandler.js'; -import { CollectorGroupHandler } from './resources/collectorGroup/CollectorGroupHandler.js'; -import { DeviceDataHandler } from './resources/deviceData/DeviceDataHandler.js'; -import { SessionHandler } from './resources/session/SessionHandler.js'; -import type { ResourceType } from './types/operations.js'; +import { DeviceHandler } from './resources/device/deviceHandler.js'; +import { DeviceGroupHandler } from './resources/deviceGroup/deviceGroupHandler.js'; +import { AlertHandler } from './resources/alert/alertHandler.js'; +import { WebsiteHandler } from './resources/website/websiteHandler.js'; +import { WebsiteGroupHandler } from './resources/websiteGroup/websiteGroupHandler.js'; +import { CollectorHandler } from './resources/collector/collectorHandler.js'; +import { UserHandler } from './resources/user/userHandler.js'; +import { DashboardHandler } from './resources/dashboard/dashboardHandler.js'; +import { CollectorGroupHandler } from './resources/collectorGroup/collectorGroupHandler.js'; +import { DeviceDataHandler } from './resources/deviceData/deviceDataHandler.js'; +import { SessionHandler } from './resources/session/sessionHandler.js'; +import type { ResourceType, BaseOperationArgs, OperationResult } from './types/operations.js'; +import { buildToolResponse } from './tools/utils/tool-response.js'; +import { registerAlertTool } from './tools/alert/registerAlertTool.js'; +import { registerCollectorTool } from './tools/collector/registerCollectorTool.js'; +import { registerDeviceGroupTool } from './tools/deviceGroup/registerDeviceGroupTool.js'; +import { registerDeviceTool } from './tools/device/registerDeviceTool.js'; +import { registerWebsiteTool } from './tools/website/registerWebsiteTool.js'; +import { registerWebsiteGroupTool } from './tools/websiteGroup/registerWebsiteGroupTool.js'; +import { registerUserTool } from './tools/user/registerUserTool.js'; +import { registerDashboardTool } from './tools/dashboard/registerDashboardTool.js'; +import { registerCollectorGroupTool } from './tools/collectorGroup/registerCollectorGroupTool.js'; +import { registerDeviceDataTool } from './tools/deviceData/registerDeviceDataTool.js'; +import { registerSessionTool } from './tools/session/registerSessionTool.js'; +import type { ToolRegistration } from './tools/types.js'; export interface ServerConfig { name?: string; @@ -38,6 +49,9 @@ export interface ServerConfig { lm_account?: string; lm_bearer_token?: string; }; + apiTimeoutMs?: number; + clientId?: string; + authMode?: 'none' | 'bearer'; instructions?: string; sessionManager?: SessionManager; } @@ -62,11 +76,12 @@ export async function createServer(config: ServerConfig = {}) { const instructions = config.instructions || [ APP_DESCRIPTION || 'Use the LogicMonitor tools to manage resources, devices, collectors, alerts, users, dashboards, and more.', - 'Authenticate with LM_ACCOUNT / LM_BEARER_TOKEN environment variables (stdio) or X-LM-* headers (HTTP).', - 'Every tool returns the raw LogicMonitor API payload plus request metadata. Use the metadata to chain follow-up actions safely.', - 'Before setting `fields` or `filter`, call resources/read on health://logicmonitor/fields/ (device, device_group, website, website_group, collector, collector_group, alert, user, dashboard) to confirm supported field names. Unknown fields are rejected.', - 'Filters must use only those field names. Example filters are included in each field metadata resource.', - 'Session helpers (lm_*_session_*) let you store variables, review history, and manage context between tool calls.' + 'Follow this order every time:', + '1) Authenticate with LM_ACCOUNT / LM_BEARER_TOKEN environment variables (stdio) or X-LM-* headers (HTTP).', + '2) Before calling any lm_* tool, read health://logicmonitor/fields/ to confirm valid field/filter names. Clients must not guess fields; unknown names are rejected.', + '3) Before repeating a query or running create/update/delete, read health://logicmonitor/session (or call lm_session get historyLimit=5 includeResults=true) to reuse prior results and applyToPrevious handles instead of relisting.', + '4) Tool summaries call out new session keys (for example session.lastDeviceListIds). Reuse those keys via applyToPrevious or lm_session instead of issuing duplicate list calls.', + '5) Use lm_session create/update/delete to manage custom batches and clean up temporary context when finished.' ].join('\n'); const sessionManager = config.sessionManager ?? new SessionManager(); @@ -78,10 +93,37 @@ export async function createServer(config: ServerConfig = {}) { }, { instructions, - capabilities: { resources: {}, tools: {} } + capabilities: { resources: {}, tools: {}, logging: {} } } ); + // Forward Winston logs as MCP logging notifications to connected clients + const winstonToMcpLevel: Record = { + error: 'error', + warn: 'warning', + info: 'info', + debug: 'debug' + }; + + const mcpLoggingTransport = new winston.transports.Stream({ + stream: new Writable({ + write(chunk: Buffer, _encoding: string, callback: () => void) { + try { + const parsed = JSON.parse(chunk.toString()); + const level = winstonToMcpLevel[parsed.level] || 'info'; + mcpServer.server.sendLoggingMessage({ + level: level as 'debug' | 'info' | 'warning' | 'error', + logger: 'lm-api-mcp', + data: parsed.message || parsed + }).catch(() => { /* client may not be connected yet */ }); + } catch { /* ignore parse errors */ } + callback(); + } + }), + format: winston.format.json() + }); + logger.add(mcpLoggingTransport); + mcpServer.registerResource( 'logicmonitor-health-status', 'health://logicmonitor/status', @@ -97,7 +139,13 @@ export async function createServer(config: ServerConfig = {}) { { uri: 'health://logicmonitor/status', mimeType: 'application/json', - text: JSON.stringify({ metrics: snapshot }, null, 2) + text: JSON.stringify({ metrics: snapshot }, null, 2), + annotations: { + audience: ['assistant'], + priority: 1, + instructions: 'Review when troubleshooting latency or rate limits.', + lastModified: new Date().toISOString() + } } ] }; @@ -215,8 +263,9 @@ export async function createServer(config: ServerConfig = {}) { description: mapping.description, name: `logicmonitor-${mapping.resource}-fields`, annotations: { - audience: ["assistant"], - priority: 1, + audience: ['assistant'], + priority: 2, + instructions: `Read before calling lm_${mapping.resource} to validate fields and filters.`, lastModified: new Date().toISOString() } } @@ -226,12 +275,168 @@ export async function createServer(config: ServerConfig = {}) { ); } + mcpServer.registerResource( + 'logicmonitor-session', + 'health://logicmonitor/session', + { + title: 'LogicMonitor Session Snapshot', + description: 'Current session variables, history, and applyToPrevious handles for this MCP session', + mimeType: 'application/json' + }, + async (uri, extra) => { + const searchParams = uri.searchParams; + const requestedLimit = Number(searchParams.get('historyLimit')); + const historyLimit = Number.isFinite(requestedLimit) ? Math.min(Math.max(Math.trunc(requestedLimit), 1), 50) : 10; + const includeResults = searchParams.get('includeResults') === 'true'; + + const snapshot = sessionManager.getSnapshot(extra.sessionId, { + historyLimit, + includeResults + }); + + const variableSummaries = Object.entries(snapshot.variables).map(([key, value]) => ({ + key, + summary: Array.isArray(value) + ? `array(${value.length})` + : value && typeof value === 'object' + ? 'object' + : typeof value + })); + + const applyToPreviousCandidates = variableSummaries + .filter(entry => entry.summary.startsWith('array')) + .map(entry => { + const countMatch = entry.summary.match(/array\((\d+)\)/); + return { + key: entry.key, + length: countMatch ? Number(countMatch[1]) : undefined + }; + }); + + return { + contents: [ + { + uri: 'health://logicmonitor/session', + mimeType: 'application/json', + text: JSON.stringify( + { + historyLimit, + includeResults, + snapshot, + variableSummaries, + applyToPreviousCandidates + }, + null, + 2 + ), + title: 'LogicMonitor session context', + description: 'Use before re-running list/update tools to reuse stored IDs', + name: 'logicmonitor-session', + annotations: { + audience: ['assistant'], + priority: 2, + instructions: 'Read before repeating queries or running create/update/delete to reuse session variables via applyToPrevious.', + lastModified: new Date().toISOString() + } + } + ] + }; + } + ); + mcpServer.server.registerCapabilities({ resources: {}, tools: {}, prompts: {} }); + // Lazily create and cache a single LogicMonitorClient for the lifetime of this server instance. + // This preserves rate-limit tracking across calls and enables HTTP connection reuse. + let cachedClient: LogicMonitorClient | undefined; + + function getClient(): LogicMonitorClient { + if (cachedClient) return cachedClient; + + const credentials = config.credentials || {}; + const { lm_account, lm_bearer_token } = credentials; + if (!lm_account || !lm_bearer_token) { + throw new McpError( + ErrorCode.InvalidRequest, + 'LogicMonitor credentials not provided. Please configure lm_account and lm_bearer_token.' + ); + } + cachedClient = new LogicMonitorClient(lm_account, lm_bearer_token, logger, { + timeoutMs: config.apiTimeoutMs + }); + return cachedClient; + } + + // Tool response config per resource type for LLM-friendly summaries + const toolResponseConfigs: Record = { + device: { resourceName: 'device', resourceTitle: 'LogicMonitor device' }, + deviceGroup: { resourceName: 'deviceGroup', resourceTitle: 'LogicMonitor device group' }, + website: { resourceName: 'website', resourceTitle: 'LogicMonitor website' }, + websiteGroup: { resourceName: 'websiteGroup', resourceTitle: 'LogicMonitor website group' }, + collector: { resourceName: 'collector', resourceTitle: 'LogicMonitor collector' }, + alert: { resourceName: 'alert', resourceTitle: 'LogicMonitor alert' }, + user: { resourceName: 'user', resourceTitle: 'LogicMonitor user' }, + dashboard: { resourceName: 'dashboard', resourceTitle: 'LogicMonitor dashboard' }, + collectorGroup: { resourceName: 'collectorGroup', resourceTitle: 'LogicMonitor collector group' }, + deviceData: { resourceName: 'deviceData', resourceTitle: 'LogicMonitor device data' }, + session: { resourceName: 'session', resourceTitle: 'LogicMonitor session' } + }; + + // Register tools -- callbacks are stubs because real dispatch goes through CallToolRequestSchema handler below. + // Each register function returns ToolRegistration metadata so we can build the ListTools response + // from our own registry instead of accessing private SDK internals. + const stubHandler = async () => ({ content: [] as never[] }); + const registeredTools: ToolRegistration[] = [ + registerAlertTool(mcpServer, stubHandler), + registerCollectorTool(mcpServer, stubHandler), + registerDeviceGroupTool(mcpServer, stubHandler), + registerDeviceTool(mcpServer, stubHandler), + registerWebsiteTool(mcpServer, stubHandler), + registerWebsiteGroupTool(mcpServer, stubHandler), + registerUserTool(mcpServer, stubHandler), + registerDashboardTool(mcpServer, stubHandler), + registerCollectorGroupTool(mcpServer, stubHandler), + registerDeviceDataTool(mcpServer, stubHandler), + registerSessionTool(mcpServer, stubHandler), + ]; + + // Override the SDK's ListToolsRequestSchema handler to apply schema flattening. + // This makes discriminated union parameters visible in the MCP Inspector. + // Uses our local registeredTools array rather than SDK-private _registeredTools. + const { flattenDiscriminatedUnion } = await import('./schemas/zodToJsonSchema.js'); + const { ListToolsRequestSchema } = await import('@modelcontextprotocol/sdk/types.js'); + const { toJsonSchemaCompat } = await import('@modelcontextprotocol/sdk/server/zod-json-schema-compat.js'); + + mcpServer.server.setRequestHandler(ListToolsRequestSchema, () => ({ + tools: registeredTools.map(tool => { + let inputSchema: Record | undefined; + + if (tool.inputSchema) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const jsonSchema = toJsonSchemaCompat(tool.inputSchema as any, { + strictUnions: true, + pipeStrategy: 'input' + }) as Record; + + inputSchema = (jsonSchema.anyOf && Array.isArray(jsonSchema.anyOf)) + ? flattenDiscriminatedUnion(jsonSchema) + : jsonSchema; + } + + return { + name: tool.name, + title: tool.title, + description: tool.description, + inputSchema, + annotations: tool.annotations, + }; + }) + })); + mcpServer.server.oninitialized = () => { logger.info('MCP session initialized'); }; @@ -240,9 +445,6 @@ export async function createServer(config: ServerConfig = {}) { logger.error('MCP server error', { error: error.message, stack: error.stack }); }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (mcpServer as any).sessionManager = sessionManager; - const summarizeResultForMetrics = (result: unknown): Record | undefined => { if (!result || typeof result !== 'object') { return undefined; @@ -267,13 +469,7 @@ export async function createServer(config: ServerConfig = {}) { }; - const allTools = [ - ...resourceTools - ]; - mcpServer.server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: allTools - })); mcpServer.server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: listPrompts() @@ -307,11 +503,12 @@ export async function createServer(config: ServerConfig = {}) { mcpServer.server.setRequestHandler(CallToolRequestSchema, async (request, extra) => { const { name, arguments: args } = request.params; const sessionId = extra?.sessionId; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const progressToken = (request.params as any)._meta?.progressToken as string | number | undefined; logger.info('Tool call received', { tool: name, args, sessionId }); try { - // Route to appropriate resource handler const resourceType = getResourceTypeFromToolName(name); if (!resourceType) { throw new McpError( @@ -320,25 +517,19 @@ export async function createServer(config: ServerConfig = {}) { ); } - // Session tools don't need credentials, but we still create a client for consistency - const credentials = config.credentials || {}; - let client: LogicMonitorClient | undefined; - - if (resourceType !== 'session') { - const { lm_account, lm_bearer_token } = credentials; - if (!lm_account || !lm_bearer_token) { - throw new McpError( - ErrorCode.InvalidRequest, - 'LogicMonitor credentials not provided. Please configure lm_account and lm_bearer_token.' - ); - } - client = new LogicMonitorClient(lm_account, lm_bearer_token, logger); - } else { - // For session operations, create a dummy client (not used but required by handler signature) - client = new LogicMonitorClient('dummy', 'dummy', logger); + const client = resourceType !== 'session' ? getClient() : undefined; + const handler = createResourceHandler(resourceType, client, sessionManager, sessionId); + + // Wire MCP ProgressNotifications when the client supplies a progressToken + if (progressToken !== undefined) { + handler.setProgressCallback((progress: number, total: number) => { + mcpServer.server.notification({ + method: 'notifications/progress', + params: { progressToken, progress, total } + }).catch(() => { /* client may have disconnected */ }); + }); } - const handler = createResourceHandler(resourceType, client, sessionManager, sessionId); // eslint-disable-next-line @typescript-eslint/no-explicit-any const result = await handler.handleOperation(args as any); @@ -346,14 +537,12 @@ export async function createServer(config: ServerConfig = {}) { metricsManager.recordSuccess(name, summarizeResultForMetrics(result)); logger.info('Tool call successful', { tool: name, sessionId }); - return { - content: [ - { - type: 'text', - text: JSON.stringify(result, null, 2) - } as TextContent - ] + const responseConfig = toolResponseConfigs[resourceType] || { + resourceName: resourceType, + resourceTitle: `LogicMonitor ${resourceType}` }; + + return buildToolResponse(args as BaseOperationArgs, result as OperationResult, responseConfig); } catch (error) { const message = error instanceof Error ? error.message : String(error); logger.error('Tool call failed', { @@ -375,22 +564,26 @@ export async function createServer(config: ServerConfig = {}) { metricsManager.recordFailure(name, error as Error, failureMetadata); + // Protocol-level errors still throw as McpError if (error instanceof McpError) { throw error; } - if (error instanceof LogicMonitorApiError) { - const apiMessage = `LogicMonitor API error${error.status ? ` (status ${error.status})` : ''}${error.code ? ` [${error.code}]` : ''}: ${error.message}`; - throw new McpError( - ErrorCode.InternalError, - apiMessage - ); - } + // API and application errors return as tool content with isError flag + // so LLM clients can see the error details and decide how to proceed + const errorMessage = error instanceof LogicMonitorApiError + ? `LogicMonitor API error${error.status ? ` (status ${error.status})` : ''}${error.code ? ` [${error.code}]` : ''}: ${error.message}` + : (message || 'An unknown error occurred'); - throw new McpError( - ErrorCode.InternalError, - message || 'An unknown error occurred' - ); + return { + content: [ + { + type: 'text' as const, + text: errorMessage + } + ], + isError: true + }; } }); @@ -419,33 +612,42 @@ export async function createServer(config: ServerConfig = {}) { */ function createResourceHandler( resourceType: ResourceType, - client: LogicMonitorClient, - sessionManager: SessionManager, + client: LogicMonitorClient | undefined, + sessionMgr: SessionManager, sessionId?: string ) { + if (resourceType === 'session') { + return new SessionHandler(sessionMgr, sessionId); + } + + if (!client) { + throw new McpError( + ErrorCode.InvalidRequest, + 'LogicMonitor credentials not provided. Please configure lm_account and lm_bearer_token.' + ); + } + switch (resourceType) { case 'device': - return new DeviceHandler(client, sessionManager, sessionId); + return new DeviceHandler(client, sessionMgr, sessionId); case 'deviceGroup': - return new DeviceGroupHandler(client, sessionManager, sessionId); + return new DeviceGroupHandler(client, sessionMgr, sessionId); case 'website': - return new WebsiteHandler(client, sessionManager, sessionId); + return new WebsiteHandler(client, sessionMgr, sessionId); case 'websiteGroup': - return new WebsiteGroupHandler(client, sessionManager, sessionId); + return new WebsiteGroupHandler(client, sessionMgr, sessionId); case 'collector': - return new CollectorHandler(client, sessionManager, sessionId); + return new CollectorHandler(client, sessionMgr, sessionId); case 'alert': - return new AlertHandler(client, sessionManager, sessionId); + return new AlertHandler(client, sessionMgr, sessionId); case 'user': - return new UserHandler(client, sessionManager, sessionId); + return new UserHandler(client, sessionMgr, sessionId); case 'dashboard': - return new DashboardHandler(client, sessionManager, sessionId); + return new DashboardHandler(client, sessionMgr, sessionId); case 'collectorGroup': - return new CollectorGroupHandler(client, sessionManager, sessionId); + return new CollectorGroupHandler(client, sessionMgr, sessionId); case 'deviceData': - return new DeviceDataHandler(client, sessionManager, sessionId); - case 'session': - return new SessionHandler(client, sessionManager, sessionId); + return new DeviceDataHandler(client, sessionMgr, sessionId); default: throw new McpError( ErrorCode.MethodNotFound, @@ -454,5 +656,5 @@ export async function createServer(config: ServerConfig = {}) { } } - return mcpServer; + return { server: mcpServer, sessionManager }; } diff --git a/src/tools/alert/registerAlertTool.ts b/src/tools/alert/registerAlertTool.ts new file mode 100644 index 0000000..47ebc59 --- /dev/null +++ b/src/tools/alert/registerAlertTool.ts @@ -0,0 +1,35 @@ +/** + * Alert Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { AlertOperationArgsSchema } from '../../resources/alert/alertZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_alert tool with the MCP server and returns its metadata + */ +export function registerAlertTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Alert Management', + description: `Manage LogicMonitor alerts. Supports the following operations: +- list: Retrieve alerts with optional filtering and field selection +- get: Get a specific alert by ID +- update: Update an alert (ack, note, escalate) + +Available fields can be found at: health://logicmonitor/fields/alert + +Note: Alert creation and deletion are not supported via the API.`, + inputSchema: AlertOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_alert', toolDef, handler); + return { name: 'lm_alert', ...toolDef }; +} + diff --git a/src/tools/collector/registerCollectorTool.ts b/src/tools/collector/registerCollectorTool.ts new file mode 100644 index 0000000..0699a34 --- /dev/null +++ b/src/tools/collector/registerCollectorTool.ts @@ -0,0 +1,32 @@ +/** + * Collector Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { CollectorOperationArgsSchema } from '../../resources/collector/collectorZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_collector tool with the MCP server and returns its metadata + */ +export function registerCollectorTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Collector Management', + description: `List LogicMonitor collectors. Currently supports list operation only. + +Available fields can be found at: health://logicmonitor/fields/collector + +Note: Collector get, create, update, and delete operations are not yet supported.`, + inputSchema: CollectorOperationArgsSchema, + annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true } + }; + server.registerTool('lm_collector', toolDef, handler); + return { name: 'lm_collector', ...toolDef }; +} + diff --git a/src/tools/collectorGroup/registerCollectorGroupTool.ts b/src/tools/collectorGroup/registerCollectorGroupTool.ts new file mode 100644 index 0000000..26cd80e --- /dev/null +++ b/src/tools/collectorGroup/registerCollectorGroupTool.ts @@ -0,0 +1,40 @@ +/** + * Collector Group Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { CollectorGroupOperationArgsSchema } from '../../resources/collectorGroup/collectorGroupZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_collector_group tool with the MCP server and returns its metadata + */ +export function registerCollectorGroupTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Collector Group Management', + description: `Manage LogicMonitor collector groups. Supports the following operations: +- list: Retrieve collector groups with optional filtering and field selection +- get: Get a specific collector group by ID +- create: Create one or more collector groups (supports batch operations) +- update: Update collector groups (supports batch operations with applyToPrevious or filter) +- delete: Delete collector groups (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/collector_group + +Batch operations support: +- Explicit arrays via 'groups' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all groups matching a filter`, + inputSchema: CollectorGroupOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_collector_group', toolDef, handler); + return { name: 'lm_collector_group', ...toolDef }; +} + diff --git a/src/tools/dashboard/registerDashboardTool.ts b/src/tools/dashboard/registerDashboardTool.ts new file mode 100644 index 0000000..0823e7c --- /dev/null +++ b/src/tools/dashboard/registerDashboardTool.ts @@ -0,0 +1,40 @@ +/** + * Dashboard Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { DashboardOperationArgsSchema } from '../../resources/dashboard/dashboardZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_dashboard tool with the MCP server and returns its metadata + */ +export function registerDashboardTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Dashboard Management', + description: `Manage LogicMonitor dashboards. Supports the following operations: +- list: Retrieve dashboards with optional filtering and field selection +- get: Get a specific dashboard by ID +- create: Create one or more dashboards (supports batch operations) +- update: Update dashboards (supports batch operations with applyToPrevious or filter) +- delete: Delete dashboards (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/dashboard + +Batch operations support: +- Explicit arrays via 'dashboards' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all dashboards matching a filter`, + inputSchema: DashboardOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_dashboard', toolDef, handler); + return { name: 'lm_dashboard', ...toolDef }; +} + diff --git a/src/tools/device/registerDeviceTool.ts b/src/tools/device/registerDeviceTool.ts new file mode 100644 index 0000000..0d2e1dd --- /dev/null +++ b/src/tools/device/registerDeviceTool.ts @@ -0,0 +1,40 @@ +/** + * Device Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { DeviceOperationArgsSchema } from '../../resources/device/deviceZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_device tool with the MCP server and returns its metadata + */ +export function registerDeviceTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Device Management', + description: `Manage LogicMonitor devices. Supports the following operations: +- list: Retrieve devices with optional filtering and field selection +- get: Get a specific device by ID +- create: Create one or more devices (supports batch operations) +- update: Update devices (supports batch operations with applyToPrevious or filter) +- delete: Delete devices (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/device + +Batch operations support: +- Explicit arrays via 'devices' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all devices matching a filter`, + inputSchema: DeviceOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_device', toolDef, handler); + return { name: 'lm_device', ...toolDef }; +} + diff --git a/src/tools/deviceData/registerDeviceDataTool.ts b/src/tools/deviceData/registerDeviceDataTool.ts new file mode 100644 index 0000000..59b83c2 --- /dev/null +++ b/src/tools/deviceData/registerDeviceDataTool.ts @@ -0,0 +1,37 @@ +/** + * Device Data Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { DeviceDataOperationArgsSchema } from '../../resources/deviceData/deviceDataZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_device_data tool with the MCP server and returns its metadata + */ +export function registerDeviceDataTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Device Data Management', + description: `Query device datasources, instances, and performance data. Supports the following operations: +- list_datasources: List datasources applied to a device +- list_instances: List instances for a device datasource +- get_data: Retrieve performance data for device datasource instances + +Available fields: +- datasources: health://logicmonitor/fields/device_datasource +- instances: health://logicmonitor/fields/device_datasource_instance + +Note: This is a read-only tool for querying monitoring data.`, + inputSchema: DeviceDataOperationArgsSchema, + annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true } + }; + server.registerTool('lm_device_data', toolDef, handler); + return { name: 'lm_device_data', ...toolDef }; +} + diff --git a/src/tools/deviceGroup/registerDeviceGroupTool.ts b/src/tools/deviceGroup/registerDeviceGroupTool.ts new file mode 100644 index 0000000..9969853 --- /dev/null +++ b/src/tools/deviceGroup/registerDeviceGroupTool.ts @@ -0,0 +1,40 @@ +/** + * Device Group Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { DeviceGroupOperationArgsSchema } from '../../resources/deviceGroup/deviceGroupZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_device_group tool with the MCP server and returns its metadata + */ +export function registerDeviceGroupTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Device Group Management', + description: `Manage LogicMonitor device groups. Supports the following operations: +- list: Retrieve device groups with optional filtering and field selection +- get: Get a specific device group by ID +- create: Create one or more device groups (supports batch operations) +- update: Update device groups (supports batch operations with applyToPrevious or filter) +- delete: Delete device groups (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/device_group + +Batch operations support: +- Explicit arrays via 'groups' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all groups matching a filter`, + inputSchema: DeviceGroupOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_device_group', toolDef, handler); + return { name: 'lm_device_group', ...toolDef }; +} + diff --git a/src/tools/resourceTools.ts b/src/tools/resourceTools.ts deleted file mode 100644 index 1011f9a..0000000 --- a/src/tools/resourceTools.ts +++ /dev/null @@ -1,955 +0,0 @@ -/** - * Resource-based tool definitions - * Replaces operation-specific tools with resource-based tools - */ - -import { Tool } from '@modelcontextprotocol/sdk/types.js'; - -const operationEnum = { - type: 'string', - enum: ['list', 'get', 'create', 'update', 'delete'], - description: 'The operation to perform on the resource' -}; - -const batchOptionsSchema = { - type: 'object', - properties: { - maxConcurrent: { - type: 'number', - minimum: 1, - maximum: 50, - description: 'Maximum concurrent requests (default: 5)' - }, - continueOnError: { - type: 'boolean', - description: 'Continue processing if some items fail (default: true)' - }, - dryRun: { - type: 'boolean', - description: 'Simulate the operation without making changes (default: false)' - } - } -}; - -export const resourceTools: Tool[] = [ - { - name: 'lm_device', - description: 'Manage LogicMonitor devices. Supports list, get, create, update, and delete operations. Batch operations support explicit arrays, applyToPrevious references, and filter-based operations.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - // Common parameters - id: { - type: 'number', - description: 'Device ID (for get, update, delete). Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,displayName,hostStatus"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/device for available fields.' - }, - // List operation - filter: { - type: 'string', - description: 'LogicMonitor filter string for list or batch operations. Examples: "name:*prod*", "hostStatus:alive". Available operators: >:, <:, >, <, !:, :, ~, !~' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000, - description: 'Results per page for list operation' - }, - offset: { - type: 'number', - minimum: 0, - description: 'Pagination offset for list operation' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create operation - displayName: { - type: 'string', - description: 'Display name for the device (create)' - }, - name: { - type: 'string', - description: 'Hostname or IP address (create)' - }, - hostGroupIds: { - type: 'array', - items: { type: 'number' }, - description: 'Array of host group IDs (create/update)' - }, - preferredCollectorId: { - type: 'number', - description: 'Preferred collector ID (create)' - }, - disableAlerting: { - type: 'boolean', - description: 'Whether to disable alerting (create/update)' - }, - customProperties: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - }, - description: 'Custom properties (create/update)' - }, - // Batch operations - devices: { - type: 'array', - items: { type: 'object' }, - description: 'Array of devices for batch create/update/delete operations' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch update operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string', - description: 'Session variable name to apply batch operation to (e.g., "lastDeviceList")' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_device_group', - description: 'Manage LogicMonitor device groups. Supports list, get, create, update, and delete operations with batch support.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - id: { - type: 'number', - description: 'Device group ID (for get, update, delete). Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,name,parentId"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/device_group' - }, - filter: { - type: 'string', - description: 'LogicMonitor filter string. Examples: "name:*servers*", "parentId:1"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000 - }, - offset: { - type: 'number', - minimum: 0 - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create/Update - name: { - type: 'string', - description: 'Group name' - }, - parentId: { - type: 'number', - description: 'Parent group ID (create)' - }, - description: { - type: 'string', - description: 'Group description' - }, - appliesTo: { - type: 'string', - description: 'AppliesTo query for dynamic group membership' - }, - customProperties: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - } - }, - // Delete - deleteChildren: { - type: 'boolean', - description: 'Whether to delete child groups (delete operation)' - }, - // Batch - groups: { - type: 'array', - items: { type: 'object' }, - description: 'Array of groups for batch operations' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string', - description: 'Session variable name for batch operations' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_website', - description: 'Manage LogicMonitor websites. Supports list, get, create, update, and delete operations with batch support.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - id: { - type: 'number', - description: 'Website ID. Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,name,domain"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/website' - }, - filter: { - type: 'string', - description: 'LogicMonitor filter string. Examples: "name:*checkout*", "groupId:12"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000 - }, - offset: { - type: 'number', - minimum: 0 - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create/Update - name: { - type: 'string', - description: 'Website name' - }, - domain: { - type: 'string', - description: 'Website domain (create)' - }, - type: { - type: 'string', - enum: ['webcheck', 'pingcheck'], - description: 'Website check type (create)' - }, - groupId: { - type: 'number', - description: 'Website group ID (create)' - }, - description: { - type: 'string' - }, - disableAlerting: { - type: 'boolean' - }, - stopMonitoring: { - type: 'boolean' - }, - pollingInterval: { - type: 'number' - }, - properties: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - } - }, - // Batch - websites: { - type: 'array', - items: { type: 'object' }, - description: 'Array of websites for batch operations' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_website_group', - description: 'Manage LogicMonitor website groups. Supports list, get, create, update, and delete operations.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - id: { - type: 'number', - description: 'Website group ID. Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,name,description"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/website_group' - }, - filter: { - type: 'string', - description: 'LogicMonitor filter string' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000 - }, - offset: { - type: 'number', - minimum: 0 - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create/Update - name: { - type: 'string' - }, - parentId: { - type: 'number', - description: 'Parent group ID (create)' - }, - description: { - type: 'string' - }, - disableAlerting: { - type: 'boolean' - }, - stopMonitoring: { - type: 'boolean' - }, - properties: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - } - }, - // Delete - deleteChildren: { - type: 'boolean' - }, - // Batch - groups: { - type: 'array', - items: { type: 'object' } - }, - updates: { - type: 'object', - description: 'Updates to apply in batch operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_collector', - description: 'List LogicMonitor collectors. Currently supports list operation only.', - inputSchema: { - type: 'object', - properties: { - operation: { - type: 'string', - enum: ['list'], - description: 'Only list operation is supported' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,description,hostname"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/collector' - }, - filter: { - type: 'string', - description: 'LogicMonitor filter string. Examples: "status:active", "collectorGroupId:3"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000 - }, - offset: { - type: 'number', - minimum: 0 - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - } - }, - required: ['operation'] - } - }, - { - name: 'lm_alert', - description: 'Manage LogicMonitor alerts. Supports list, get, and update (ack/note/escalate) operations. Alerts cannot be created or deleted via API.', - inputSchema: { - type: 'object', - properties: { - operation: { - type: 'string', - enum: ['list', 'get', 'update'], - description: 'Alert operations: list, get, or update (for ack/note/escalate)' - }, - id: { - type: ['string', 'number'], - description: 'Alert ID. Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return (e.g., "id,severity,resourceTemplateName"). Omit this property entirely to return all fields. See resource health://logicmonitor/fields/alert' - }, - filter: { - type: 'string', - description: 'LogicMonitor filter string. Examples: "severity>2", "cleared:false". Note: filtering only available for specific fields (id, type, acked, rule, chain, severity, cleared, sdted, startEpoch, monitorObjectName, monitorObjectGroups, resourceTemplateName, instanceName, dataPointName)' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000 - }, - offset: { - type: 'number', - minimum: 0 - }, - sort: { - type: 'string', - description: 'Sort by property with + (asc) or - (desc). Example: "-startEpoch"' - }, - needMessage: { - type: 'boolean', - description: 'Include detailed alert messages' - }, - customColumns: { - type: 'string', - description: 'Property or token values to include' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Update operations - action: { - type: 'string', - enum: ['ack', 'note', 'escalate'], - description: 'Action to perform (required for update operation)' - }, - ackComment: { - type: 'string', - description: 'Comment for ack action' - }, - note: { - type: 'string', - description: 'Note content for note action' - } - }, - required: ['operation'] - } - }, - { - name: 'lm_user', - description: 'Manage LogicMonitor users. Supports list, get, create, update, and delete operations. Batch operations support explicit arrays, applyToPrevious references, and filter-based operations.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - // Common parameters - id: { - type: 'number', - description: 'User ID (for get, update, delete). Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return. Omit this property entirely to return all fields. See resource health://logicmonitor/fields/user for available fields.' - }, - // List operation - filter: { - type: 'string', - description: 'LogicMonitor filter string for list or batch operations. Examples: "username:admin*", "status:active"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000, - description: 'Results per page for list operation' - }, - offset: { - type: 'number', - minimum: 0, - description: 'Pagination offset for list operation' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create operation - username: { - type: 'string', - description: 'Username (create, required)' - }, - email: { - type: 'string', - description: 'Email address (create, required)' - }, - firstName: { - type: 'string', - description: 'First name (create, required)' - }, - lastName: { - type: 'string', - description: 'Last name (create, required)' - }, - roles: { - type: 'array', - items: { - type: 'object', - properties: { - id: { type: 'number' } - } - }, - description: 'Array of role objects with id (create, required)' - }, - password: { - type: 'string', - description: 'Password (create, optional)' - }, - phone: { - type: 'string', - description: 'Phone number (create/update)' - }, - apionly: { - type: 'boolean', - description: 'API-only user flag (create/update)' - }, - forcePasswordChange: { - type: 'boolean', - description: 'Force password change on next login (create/update)' - }, - note: { - type: 'string', - description: 'User note (create/update)' - }, - status: { - type: 'string', - description: 'User status (update)' - }, - // Batch operations - users: { - type: 'array', - items: { type: 'object' }, - description: 'Array of users for batch create/update/delete' - }, - ids: { - type: 'array', - items: { type: 'number' }, - description: 'Array of user IDs for batch delete' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch update operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string', - description: 'Reference to previous operation result (e.g., "lastUserList") for batch operations' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_dashboard', - description: 'Manage LogicMonitor dashboards. Supports list, get, create, update, and delete operations. Batch operations support explicit arrays, applyToPrevious references, and filter-based operations.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - // Common parameters - id: { - type: 'number', - description: 'Dashboard ID (for get, update, delete). Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return. Omit this property entirely to return all fields. See resource health://logicmonitor/fields/dashboard for available fields.' - }, - // List operation - filter: { - type: 'string', - description: 'LogicMonitor filter string for list or batch operations. Examples: "name:*prod*", "owner:admin"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000, - description: 'Results per page for list operation' - }, - offset: { - type: 'number', - minimum: 0, - description: 'Pagination offset for list operation' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create operation - name: { - type: 'string', - description: 'Dashboard name (create, required)' - }, - groupId: { - type: 'number', - description: 'Dashboard group ID (create, required)' - }, - description: { - type: 'string', - description: 'Dashboard description (create/update)' - }, - widgetsConfig: { - type: 'string', - description: 'Widgets configuration JSON string (create/update)' - }, - widgetTokens: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - }, - description: 'Widget tokens (create/update)' - }, - template: { - type: 'boolean', - description: 'Whether dashboard is a template (create/update)' - }, - sharable: { - type: 'boolean', - description: 'Whether dashboard is sharable (create/update)' - }, - // Batch operations - dashboards: { - type: 'array', - items: { type: 'object' }, - description: 'Array of dashboards for batch create/update/delete' - }, - ids: { - type: 'array', - items: { type: 'number' }, - description: 'Array of dashboard IDs for batch delete' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch update operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string', - description: 'Reference to previous operation result (e.g., "lastDashboardList") for batch operations' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_collector_group', - description: 'Manage LogicMonitor collector groups. Supports list, get, create, update, and delete operations. Batch operations support explicit arrays, applyToPrevious references, and filter-based operations.', - inputSchema: { - type: 'object', - properties: { - operation: operationEnum, - // Common parameters - id: { - type: 'number', - description: 'Collector group ID (for get, update, delete). Can be omitted if referencing last operation.' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return. Omit this property entirely to return all fields. See resource health://logicmonitor/fields/collector_group for available fields.' - }, - // List operation - filter: { - type: 'string', - description: 'LogicMonitor filter string for list or batch operations. Examples: "name:*prod*", "autoBalance:true"' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000, - description: 'Results per page for list operation' - }, - offset: { - type: 'number', - minimum: 0, - description: 'Pagination offset for list operation' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Create operation - name: { - type: 'string', - description: 'Collector group name (create, required)' - }, - description: { - type: 'string', - description: 'Collector group description (create, required)' - }, - autoBalance: { - type: 'boolean', - description: 'Enable auto-balance (create/update)' - }, - autoBalanceInstanceCountThreshold: { - type: 'number', - description: 'Auto-balance threshold (create/update)' - }, - customProperties: { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - value: { type: 'string' } - } - }, - description: 'Custom properties (create/update)' - }, - // Batch operations - groups: { - type: 'array', - items: { type: 'object' }, - description: 'Array of collector groups for batch create/update/delete' - }, - ids: { - type: 'array', - items: { type: 'number' }, - description: 'Array of collector group IDs for batch delete' - }, - updates: { - type: 'object', - description: 'Updates to apply in batch update operations. Only used with applyToPrevious or filter. Leave empty if not doing batch updates.', - additionalProperties: true - }, - applyToPrevious: { - type: 'string', - description: 'Reference to previous operation result (e.g., "lastCollectorGroupList") for batch operations' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_device_data', - description: 'Retrieve device monitoring data including datasources, instances, and metrics. Supports three operations: list_datasources (list datasources for device), list_instances (list instances for datasource), get_data (retrieve metric data for instances). Supports batch operations for multiple instances.', - inputSchema: { - type: 'object', - properties: { - operation: { - type: 'string', - enum: ['list_datasources', 'list_instances', 'get_data'], - description: 'The operation to perform: list_datasources, list_instances, or get_data' - }, - // list_datasources parameters - deviceId: { - type: 'number', - description: 'Device ID (required for list_datasources and list_instances)' - }, - deviceIds: { - type: 'array', - items: { type: 'number' }, - description: 'Array of device IDs for batch list_datasources operations' - }, - datasourceIncludeFilter: { - type: 'string', - description: 'Wildcard filter to include datasources (e.g., "CPU*", "*Memory*"). Only for list_datasources.' - }, - datasourceExcludeFilter: { - type: 'string', - description: 'Wildcard filter to exclude datasources (e.g., "Test*"). Only for list_datasources.' - }, - // list_instances parameters - datasourceId: { - type: 'number', - description: 'Datasource ID (required for list_instances and get_data)' - }, - datasourceIds: { - type: 'array', - items: { type: 'number' }, - description: 'Array of datasource IDs for batch operations' - }, - datasourceName: { - type: 'string', - description: 'Datasource name for lookup (alternative to datasourceId)' - }, - // get_data parameters - instanceId: { - type: 'number', - description: 'Instance ID (required for get_data unless instanceIds provided)' - }, - instanceIds: { - type: 'array', - items: { type: 'number' }, - description: 'Array of instance IDs for batch metric retrieval (e.g., all CPU cores)' - }, - instanceName: { - type: 'string', - description: 'Instance name for lookup (alternative to instanceId)' - }, - startDate: { - type: 'string', - description: 'Start date/time in ISO 8601 format (e.g., "2025-01-15T00:00:00Z"). Defaults to 24 hours ago.' - }, - endDate: { - type: 'string', - description: 'End date/time in ISO 8601 format. Defaults to now.' - }, - start: { - type: 'number', - description: 'Start time as Unix epoch (alternative to startDate)' - }, - end: { - type: 'number', - description: 'End time as Unix epoch (alternative to endDate)' - }, - datapoints: { - type: ['string', 'array'], - description: 'Comma-separated datapoint names or array of names to retrieve. Omit for all datapoints.' - }, - format: { - type: 'string', - description: 'Data format (optional)' - }, - aggregate: { - type: 'string', - description: 'Aggregation method (optional)' - }, - // Common parameters - filter: { - type: 'string', - description: 'LogicMonitor filter string for list operations' - }, - fields: { - type: 'string', - description: 'Comma-separated list of specific fields to return. Omit this property entirely to return all fields. See resources health://logicmonitor/fields/device_datasource (for list_datasources) and health://logicmonitor/fields/device_datasource_instance (for list_instances) for available fields.' - }, - size: { - type: 'number', - minimum: 1, - maximum: 1000, - description: 'Results per page for list operations' - }, - offset: { - type: 'number', - minimum: 0, - description: 'Pagination offset for list operations' - }, - autoPaginate: { - type: 'boolean', - description: 'Whether to automatically fetch all pages (default: true). Set to false to limit results to the specified size.' - }, - // Batch operation parameters - applyToPrevious: { - type: 'string', - description: 'Reference to previous operation result for batch operations' - }, - batchOptions: batchOptionsSchema - }, - required: ['operation'] - } - }, - { - name: 'lm_session', - description: 'Manage session context including variables, history, and results. Supports list (history), get (context/variable), create (set variable), update (update variable), and delete (clear context) operations.', - inputSchema: { - type: 'object', - properties: { - operation: { - type: 'string', - enum: ['list', 'get', 'create', 'update', 'delete'], - description: 'The operation to perform on the session' - }, - // List operation (history) - limit: { - type: 'number', - minimum: 1, - maximum: 50, - description: 'Limit the number of history entries returned (default: 10, max: 50). Used with list operation.' - }, - // Get operation (context or variable) - key: { - type: 'string', - description: 'Name of the variable to read. If provided with get operation, returns specific variable. If omitted, returns full session context.' - }, - historyLimit: { - type: 'number', - minimum: 1, - maximum: 50, - description: 'Maximum number of history entries to return in context (default: 10, max: 50). Used with get operation when key is not provided.' - }, - includeResults: { - type: 'boolean', - description: 'When true, include the full lastResults object instead of only the keys. Used with get operation when key is not provided.' - }, - // Create/Update operations (set variable) - value: { - description: 'Value to store (any JSON-serializable data). Required for create and update operations.', - anyOf: [ - { type: 'string' }, - { type: 'number' }, - { type: 'boolean' }, - { type: 'object' }, - { type: 'array', items: {} }, - { type: 'null' } - ] - }, - // Delete operation (clear context) - scope: { - type: 'string', - enum: ['variables', 'history', 'results', 'all'], - description: 'Which part of the context to clear (default: all). Used with delete operation.' - } - }, - required: ['operation'] - } - } -]; - diff --git a/src/tools/session/registerSessionTool.ts b/src/tools/session/registerSessionTool.ts new file mode 100644 index 0000000..f0d27a4 --- /dev/null +++ b/src/tools/session/registerSessionTool.ts @@ -0,0 +1,47 @@ +/** + * Session Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { SessionOperationArgsSchema } from '../../resources/session/sessionZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_session tool with the MCP server and returns its metadata + */ +export function registerSessionTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Session Management', + description: `Manage session state, variables, and operation history across tool calls. + +OPERATIONS: + +1. list - Review the latest tool calls, stored variables, and applyToPrevious candidates (limit defaults to 10). +2. get - Fetch a full session snapshot or a specific variable (historyLimit 1-50, includeResults for raw payloads). +3. create - Persist a new variable (e.g., "myProdDevices") for downstream applyToPrevious usage. +4. update - Overwrite an existing variable while keeping the same key reference. +5. delete - Clear variables, history, and/or cached results (scope defaults to 'all'). + +QUICK WORKFLOWS: + +- Rapid batch edits: + 1. Call lm_device list ... to populate session.lastDeviceList & session.lastDeviceListIds. + 2. Read health://logicmonitor/session or lm_session get to confirm the keys. + 3. Run lm_device update/delete with applyToPrevious: "lastDeviceListIds" (or your custom key). + +- Snapshot validation: + - Use resources/read health://logicmonitor/session?historyLimit=5&includeResults=true to see the exact keys and history before repeating queries. + - Use lm_session list to surface storedVariables and applyToPreviousCandidates when working entirely via tools.`, + inputSchema: SessionOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false } + }; + server.registerTool('lm_session', toolDef, handler); + return { name: 'lm_session', ...toolDef }; +} + diff --git a/src/tools/types.ts b/src/tools/types.ts new file mode 100644 index 0000000..15ebd5c --- /dev/null +++ b/src/tools/types.ts @@ -0,0 +1,16 @@ +/** + * Shared types for tool registration + */ + +/** + * Metadata returned by each registerXxxTool function. + * Used to build the ListToolsRequestSchema response without + * accessing private SDK internals. + */ +export interface ToolRegistration { + name: string; + title?: string; + description?: string; + inputSchema: unknown; + annotations?: Record; +} diff --git a/src/tools/user/registerUserTool.ts b/src/tools/user/registerUserTool.ts new file mode 100644 index 0000000..0d0fce4 --- /dev/null +++ b/src/tools/user/registerUserTool.ts @@ -0,0 +1,40 @@ +/** + * User Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { UserOperationArgsSchema } from '../../resources/user/userZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_user tool with the MCP server and returns its metadata + */ +export function registerUserTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor User Management', + description: `Manage LogicMonitor users. Supports the following operations: +- list: Retrieve users with optional filtering and field selection +- get: Get a specific user by ID +- create: Create one or more users (supports batch operations) +- update: Update users (supports batch operations with applyToPrevious or filter) +- delete: Delete users (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/user + +Batch operations support: +- Explicit arrays via 'users' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all users matching a filter`, + inputSchema: UserOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_user', toolDef, handler); + return { name: 'lm_user', ...toolDef }; +} + diff --git a/src/tools/utils/tool-response.ts b/src/tools/utils/tool-response.ts new file mode 100644 index 0000000..aefd9a5 --- /dev/null +++ b/src/tools/utils/tool-response.ts @@ -0,0 +1,132 @@ +import type { BaseOperationArgs, OperationResult, OperationType } from '../../types/operations.js'; +import { capitalizeFirst } from '../../utils/strings.js'; + +interface ToolResponseConfig { + resourceName: string; + resourceTitle: string; + sessionKeyOverrides?: string[]; + notes?: string[]; +} + +export function buildToolResponse( + args: BaseOperationArgs, + result: OperationResult, + config: ToolResponseConfig +) { + const summary = formatSummary(args.operation, result, config); + + return { + content: [ + { + type: 'text' as const, + text: summary + }, + { + type: 'text' as const, + text: `Full LogicMonitor payload:\n${JSON.stringify(result, null, 2)}` + } + ] + }; +} + +function formatSummary( + operation: OperationType, + result: OperationResult, + config: ToolResponseConfig +) { + const lines: string[] = []; + const status = result.success ? 'succeeded' : 'completed'; + lines.push(`${config.resourceTitle} ${operation} ${status}.`); + + const effect = describeEffect(result); + if (effect) { + lines.push(effect); + } + + const sessionKeys = getSessionKeys(operation, result, config); + if (sessionKeys.length > 0) { + lines.push(`Session keys ready: ${sessionKeys.join(', ')}.`); + lines.push('Reuse them via lm_session get or applyToPrevious to avoid duplicate queries.'); + } + + if (config.notes?.length) { + lines.push(...config.notes); + } + + if (lines.length === 1) { + lines.push('See JSON payload for full API response.'); + } + + return lines.join('\n'); +} + +function describeEffect(result: OperationResult) { + if (Array.isArray(result.items)) { + return `Affected items: ${result.items.length}.`; + } + if (typeof result.total === 'number') { + return `Total items reported: ${result.total}.`; + } + if (result.summary) { + return `Batch summary: ${result.summary.succeeded}/${result.summary.total} succeeded.`; + } + if (result.data) { + return 'Single resource payload stored in session.'; + } + return undefined; +} + +function getSessionKeys( + operation: OperationType, + result: OperationResult, + config: ToolResponseConfig +) { + if (Array.isArray(config.sessionKeyOverrides)) { + return config.sessionKeyOverrides; + } + if (config.resourceName === 'session') { + return []; + } + return deriveDefaultSessionKeys(operation, result, config.resourceName); +} + +function deriveDefaultSessionKeys( + operation: OperationType, + result: OperationResult, + resourceName: string +) { + const keys: string[] = []; + const capitalized = capitalizeFirst(resourceName); + + if (operation === 'list' && Array.isArray(result.items) && result.items.length > 0) { + keys.push(`session.last${capitalized}List`, `session.last${capitalized}ListIds`); + } + + if (operation === 'get' && result.data) { + keys.push(`session.last${capitalized}`, `session.last${capitalized}Id`); + } + + if (operation === 'create') { + if (result.data) { + keys.push(`session.lastCreated${capitalized}`, `session.last${capitalized}`); + } else if (Array.isArray(result.items) && result.items.length > 0) { + keys.push(`session.lastCreated${capitalized}s`); + } + } + + if (operation === 'update') { + if (result.data) { + keys.push(`session.lastUpdated${capitalized}`, `session.last${capitalized}`); + } else if (Array.isArray(result.items) && result.items.length > 0) { + keys.push(`session.lastUpdated${capitalized}s`); + } + } + + if (operation === 'delete' && result.data) { + keys.push(`session.lastDeleted${capitalized}Id`); + } + + return keys; +} + + diff --git a/src/tools/website/registerWebsiteTool.ts b/src/tools/website/registerWebsiteTool.ts new file mode 100644 index 0000000..9624830 --- /dev/null +++ b/src/tools/website/registerWebsiteTool.ts @@ -0,0 +1,40 @@ +/** + * Website Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { WebsiteOperationArgsSchema } from '../../resources/website/websiteZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_website tool with the MCP server and returns its metadata + */ +export function registerWebsiteTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Website Management', + description: `Manage LogicMonitor websites. Supports the following operations: +- list: Retrieve websites with optional filtering and field selection +- get: Get a specific website by ID +- create: Create one or more websites (supports batch operations) +- update: Update websites (supports batch operations with applyToPrevious or filter) +- delete: Delete websites (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/website + +Batch operations support: +- Explicit arrays via 'websites' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all websites matching a filter`, + inputSchema: WebsiteOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_website', toolDef, handler); + return { name: 'lm_website', ...toolDef }; +} + diff --git a/src/tools/websiteGroup/registerWebsiteGroupTool.ts b/src/tools/websiteGroup/registerWebsiteGroupTool.ts new file mode 100644 index 0000000..adc40bf --- /dev/null +++ b/src/tools/websiteGroup/registerWebsiteGroupTool.ts @@ -0,0 +1,40 @@ +/** + * Website Group Tool Registration using MCP SDK's high-level registerTool API + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { WebsiteGroupOperationArgsSchema } from '../../resources/websiteGroup/websiteGroupZodSchemas.js'; +import type { ToolRegistration } from '../types.js'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type ToolCallback = (...args: any[]) => Promise; + +/** + * Registers the lm_website_group tool with the MCP server and returns its metadata + */ +export function registerWebsiteGroupTool( + server: McpServer, + handler: ToolCallback +): ToolRegistration { + const toolDef = { + title: 'LogicMonitor Website Group Management', + description: `Manage LogicMonitor website groups. Supports the following operations: +- list: Retrieve website groups with optional filtering and field selection +- get: Get a specific website group by ID +- create: Create one or more website groups (supports batch operations) +- update: Update website groups (supports batch operations with applyToPrevious or filter) +- delete: Delete website groups (supports batch operations) + +Available fields can be found at: health://logicmonitor/fields/website_group + +Batch operations support: +- Explicit arrays via 'groups' parameter +- applyToPrevious: Reference session variables for batch operations +- filter: Apply operations to all groups matching a filter`, + inputSchema: WebsiteGroupOperationArgsSchema, + annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true } + }; + server.registerTool('lm_website_group', toolDef, handler); + return { name: 'lm_website_group', ...toolDef }; +} + diff --git a/src/types/logicmonitor.ts b/src/types/logicmonitor.ts index 509e7f2..1338330 100644 --- a/src/types/logicmonitor.ts +++ b/src/types/logicmonitor.ts @@ -30,6 +30,7 @@ export interface LMDevice { alertStatusPriority: number; alertDisableStatus: string; sdtStatus: string; + linkUrl?: string; } export interface LMDeviceGroup { @@ -172,6 +173,7 @@ export interface LMAlert { empty: boolean; }; customColumns?: Record; + linkUrl?: string; } export interface LMAlertPaginatedResponse extends LMPaginatedResponse { @@ -267,6 +269,7 @@ export interface LMWebsite { name: string; value: string; }>; + linkUrl?: string; } export interface LMWebsiteGroup { @@ -375,6 +378,7 @@ export interface LMDashboard { value: string; }>; overwriteGroupFields: boolean; + linkUrl?: string; } export interface LMCollectorGroup { diff --git a/src/utils/fieldMetadata.ts b/src/utils/fieldMetadata.ts index 4f3b5b0..d04db0c 100644 --- a/src/utils/fieldMetadata.ts +++ b/src/utils/fieldMetadata.ts @@ -1,4 +1,4 @@ -import swaggerDocument from '../../docs/swagger.json' with { type: 'json' }; +import swaggerDocument from '../schemas/swagger.json' with { type: 'json' }; import { parseFieldList } from './fieldSelection.js'; export type ResourceKey = 'device' | 'deviceGroup' | 'collector' | 'website' | 'websiteGroup' | 'alert' | 'user' | 'dashboard' | 'collectorGroup' | 'deviceDatasource' | 'deviceDatasourceInstance'; diff --git a/src/utils/gracefulShutdown.ts b/src/utils/gracefulShutdown.ts new file mode 100644 index 0000000..83fc58e --- /dev/null +++ b/src/utils/gracefulShutdown.ts @@ -0,0 +1,113 @@ +/** + * Graceful shutdown coordinator + * Handles clean shutdown of all server components + */ + +import type { Server } from 'http'; +import type { Server as HttpsServer } from 'https'; +import winston from 'winston'; + +export type ShutdownHandler = () => Promise | void; + +export class GracefulShutdown { + private handlers: ShutdownHandler[] = []; + private isShuttingDown = false; + private logger: winston.Logger; + + constructor(logger: winston.Logger) { + this.logger = logger; + } + + /** + * Register a shutdown handler + */ + registerHandler(handler: ShutdownHandler): void { + this.handlers.push(handler); + } + + /** + * Register HTTP/HTTPS server for graceful shutdown + */ + registerServer(server: Server | HttpsServer, name: string): void { + this.registerHandler(async () => { + this.logger.info(`Closing ${name} server...`); + + return new Promise((resolve, reject) => { + // Stop accepting new connections + server.close((err) => { + if (err) { + this.logger.error(`Error closing ${name} server:`, err); + reject(err); + } else { + this.logger.info(`${name} server closed`); + resolve(); + } + }); + + // Force close after timeout + setTimeout(() => { + this.logger.warn(`Force closing ${name} server after timeout`); + resolve(); + }, 10000); // 10 second timeout + }); + }); + } + + /** + * Perform graceful shutdown + */ + async shutdown(signal: string): Promise { + if (this.isShuttingDown) { + this.logger.warn('Shutdown already in progress'); + return; + } + + this.isShuttingDown = true; + this.logger.info(`Received ${signal}, starting graceful shutdown...`); + + // Execute all shutdown handlers in reverse order (LIFO) + for (let i = this.handlers.length - 1; i >= 0; i--) { + try { + await this.handlers[i](); + } catch (error) { + this.logger.error('Error during shutdown handler:', error); + } + } + + this.logger.info('Graceful shutdown complete'); + } + + /** + * Setup signal handlers + */ + setupSignalHandlers(): void { + const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP']; + + for (const signal of signals) { + process.on(signal, () => { + this.shutdown(signal).then(() => { + process.exit(0); + }).catch((error) => { + this.logger.error('Shutdown failed:', error); + process.exit(1); + }); + }); + } + + // Handle uncaught errors without exiting immediately + process.on('uncaughtException', (error) => { + this.logger.error('Uncaught exception:', error); + this.shutdown('uncaughtException').then(() => { + process.exit(1); + }); + }); + + process.on('unhandledRejection', (reason) => { + this.logger.error('Unhandled rejection:', reason); + this.shutdown('unhandledRejection').then(() => { + process.exit(1); + }); + }); + } +} + diff --git a/src/utils/resourceLinks.ts b/src/utils/resourceLinks.ts new file mode 100644 index 0000000..e7d7ab2 --- /dev/null +++ b/src/utils/resourceLinks.ts @@ -0,0 +1,81 @@ +interface BaseArgs { + company: string; +} + +interface WithGroups { + groupIds?: Array; +} + +export interface DashboardLinkArgs extends BaseArgs, WithGroups { + dashboardId: number | string; +} + +export interface DeviceLinkArgs extends BaseArgs, WithGroups { + deviceId: number | string; +} + +export interface WebsiteLinkArgs extends BaseArgs, WithGroups { + websiteId: number | string; +} + +export interface AlertLinkArgs extends BaseArgs { + alertId: number | string; +} + +function normalizeCompany(company: string | undefined): string { + if (!company || !company.trim()) { + throw new Error('LogicMonitor company subdomain is required to build URLs.'); + } + return company.trim().toLowerCase(); +} + +function ensureId(id: number | string | undefined, label: string): string { + if (id === null || typeof id === 'undefined' || `${id}`.trim().length === 0) { + throw new Error(`${label} is required to build URLs.`); + } + return `${id}`.trim(); +} + +function baseUrl(company: string): string { + const normalized = normalizeCompany(company); + return `https://${normalized}.logicmonitor.com/santaba/uiv4`; +} + +function buildGroupSegments( + prefix: string, + groupIds?: Array +): string[] { + if (!groupIds || groupIds.length === 0) { + return []; + } + return groupIds + .filter((value): value is number | string => !(value === null || typeof value === 'undefined')) + .map(value => `${prefix}-${value}`); +} + +export function getDashboardLink(args: DashboardLinkArgs): string { + const dashboardId = ensureId(args.dashboardId, 'dashboardId'); + const segments = [ + ...buildGroupSegments('dashboardGroups', args.groupIds), + `dashboards-${dashboardId}` + ]; + return `${baseUrl(args.company)}/dashboards/${segments.join(',')}`; +} + +export function getDeviceLink(args: DeviceLinkArgs): string { + const deviceId = ensureId(args.deviceId, 'deviceId'); + const idSegment = encodeURIComponent(deviceId); + return `${baseUrl(args.company)}/resources/treeNodes/t-d,id-${idSegment}?source=details&tab=info`; +} + +export function getWebsiteLink(args: WebsiteLinkArgs): string { + const websiteId = ensureId(args.websiteId, 'websiteId'); + const idSegment = encodeURIComponent(websiteId); + return `${baseUrl(args.company)}/websites/treeNodes/t-s,id-${idSegment}?source=details&tab=info`; +} + +export function getAlertLink(args: AlertLinkArgs): string { + const alertId = ensureId(args.alertId, 'alertId'); + return `${baseUrl(args.company)}/alerts/${alertId}`; +} + diff --git a/src/utils/strings.ts b/src/utils/strings.ts new file mode 100644 index 0000000..844d146 --- /dev/null +++ b/src/utils/strings.ts @@ -0,0 +1,12 @@ +/** + * Shared string utility functions + */ + +/** + * Capitalize the first character of a string. + * Returns the original string unchanged if empty. + */ +export function capitalizeFirst(value: string): string { + if (!value.length) return value; + return value.charAt(0).toUpperCase() + value.slice(1); +} diff --git a/src/utils/validation.ts b/src/utils/validation.ts deleted file mode 100644 index efbd678..0000000 --- a/src/utils/validation.ts +++ /dev/null @@ -1,545 +0,0 @@ -import Joi from 'joi'; - -// Device validation schemas -export const listDevicesSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor query syntax. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - start: Joi.number().optional(), - end: Joi.number().optional(), - netflowFilter: Joi.string().optional(), - includeDeletedResources: Joi.boolean().optional() -}).unknown(false); - -export const getDeviceSchema = Joi.object({ - deviceId: Joi.number().required(), - fields: Joi.string().optional(), - start: Joi.number().optional(), - end: Joi.number().optional(), - netflowFilter: Joi.string().optional(), - needStcGrpAndSortedCP: Joi.boolean().optional() -}).unknown(false); - -const singleDeviceSchema = Joi.object({ - displayName: Joi.string().required(), - name: Joi.string().required(), - hostGroupIds: Joi.array().items(Joi.number()).min(1).required(), - preferredCollectorId: Joi.number().required(), - disableAlerting: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -export const createDeviceSchema = Joi.object({ - // Single device properties - displayName: Joi.string().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - name: Joi.string().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - hostGroupIds: Joi.array().items(Joi.number()).min(1).when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - preferredCollectorId: Joi.number().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - disableAlerting: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - // Batch properties - devices: Joi.array().items(singleDeviceSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('displayName', 'devices').unknown(true); - -const singleUpdateDeviceSchema = Joi.object({ - deviceId: Joi.number().required(), - displayName: Joi.string().optional(), - hostGroupIds: Joi.array().items(Joi.number()).optional(), - disableAlerting: Joi.boolean().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -export const updateDeviceSchema = Joi.object({ - // Single device properties - deviceId: Joi.number().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - displayName: Joi.string().optional(), - hostGroupIds: Joi.array().items(Joi.number()).optional(), - disableAlerting: Joi.boolean().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - // Batch properties - devices: Joi.array().items(singleUpdateDeviceSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('deviceId', 'devices').unknown(true); - -const singleDeleteDeviceSchema = Joi.object({ - deviceId: Joi.number().required() -}); - -export const deleteDeviceSchema = Joi.object({ - // Single device properties - deviceId: Joi.number().when('devices', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - // Batch properties - devices: Joi.array().items(singleDeleteDeviceSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('deviceId', 'devices').unknown(true); - -// Device Group validation schemas -export const listDeviceGroupsSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor query syntax. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - parentId: Joi.number().optional() -}).unknown(false); - -export const getDeviceGroupSchema = Joi.object({ - groupId: Joi.number().required() -}).unknown(false); - -const singleDeviceGroupSchema = Joi.object({ - name: Joi.string().required(), - parentId: Joi.number().required(), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -export const createDeviceGroupSchema = Joi.object({ - // Single group properties - name: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - parentId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - // Batch properties - groups: Joi.array().items(singleDeviceGroupSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('name', 'groups').unknown(true); - -const singleUpdateDeviceGroupSchema = Joi.object({ - groupId: Joi.number().required(), - name: Joi.string().optional(), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional() -}).unknown(true); - -export const updateDeviceGroupSchema = Joi.object({ - // Single group properties - groupId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - name: Joi.string().optional(), - description: Joi.string().optional(), - appliesTo: Joi.string().optional(), - customProperties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - // Batch properties - groups: Joi.array().items(singleUpdateDeviceGroupSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('groupId', 'groups').unknown(true); - -const singleDeleteDeviceGroupSchema = Joi.object({ - groupId: Joi.number().required(), - deleteChildren: Joi.boolean().optional() -}).unknown(true); - -export const deleteDeviceGroupSchema = Joi.object({ - // Single group properties - groupId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - deleteChildren: Joi.boolean().optional(), - // Batch properties - groups: Joi.array().items(singleDeleteDeviceGroupSchema).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(50).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('groupId', 'groups').unknown(true); - -// Collector validation schemas -export const listCollectorsSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor query syntax. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional() -}).unknown(false); - -// Alert validation schemas -export const listAlertsSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor filter string. Note that filtering is only available for id, type, acked, rule, chain, severity, cleared, sdted, startEpoch, monitorObjectName, monitorObjectGroups, resourceTemplateName, instanceName, and dataPointName. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - fields: Joi.string().optional(), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - sort: Joi.string().optional(), - needMessage: Joi.boolean().optional(), - customColumns: Joi.string().optional() -}); - -export const getAlertSchema = Joi.object({ - alertId: Joi.string().required() -}); - -export const ackAlertSchema = Joi.object({ - alertId: Joi.string().required(), - ackComment: Joi.string().required() -}); - -export const addAlertNoteSchema = Joi.object({ - alertId: Joi.string().required(), - ackComment: Joi.string().required() -}); - -export const escalateAlertSchema = Joi.object({ - alertId: Joi.string().required() -}); - -// Website validation schemas -export const listWebsitesSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor query syntax. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional(), - collectorIds: Joi.string().optional() -}).unknown(false); - -export const getWebsiteSchema = Joi.object({ - websiteId: Joi.number().required() -}).unknown(false); - -export const createWebsiteSchema = Joi.object({ - // Single website properties - name: Joi.string().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - domain: Joi.string().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - type: Joi.string().valid('webcheck', 'pingcheck').when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - groupId: Joi.number().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - steps: Joi.array().items( - Joi.object({ - url: Joi.string().required(), - HTTPMethod: Joi.string().optional(), - statusCode: Joi.string().optional(), - description: Joi.string().optional() - }).unknown(true) - ).optional(), - // Batch mode properties - websites: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - domain: Joi.string().required(), - type: Joi.string().valid('webcheck', 'pingcheck').required(), - groupId: Joi.number().required(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - steps: Joi.array().items( - Joi.object({ - url: Joi.string().required(), - HTTPMethod: Joi.string().optional(), - statusCode: Joi.string().optional(), - description: Joi.string().optional() - }).unknown(true) - ).optional() - }).unknown(true) - ), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('name', 'websites').unknown(true); - -export const updateWebsiteSchema = Joi.object({ - websiteId: Joi.number().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - // Single mode properties - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - // Batch mode properties - websites: Joi.array().items( - Joi.object({ - websiteId: Joi.number().required(), - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - useDefaultAlertSetting: Joi.boolean().optional(), - useDefaultLocationSetting: Joi.boolean().optional(), - pollingInterval: Joi.number().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional() - }).unknown(true) - ), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('websiteId', 'websites').unknown(true); - -export const deleteWebsiteSchema = Joi.object({ - websiteId: Joi.number().when('websites', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - // Batch mode properties - websites: Joi.array().items( - Joi.object({ - websiteId: Joi.number().required() - }).unknown(true) - ).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('websiteId', 'websites').unknown(true); - -// Website Group validation schemas -export const listWebsiteGroupsSchema = Joi.object({ - filter: Joi.string().optional().description('LogicMonitor query syntax. Available operators: >: (greater than or equals), <: (less than or equals), > (greater than), < (less than), !: (does not equal), : (equals), ~ (includes), !~ (does not include).'), - size: Joi.number().min(1).max(1000).optional(), - offset: Joi.number().min(0).optional(), - fields: Joi.string().optional() -}).unknown(false); - -export const getWebsiteGroupSchema = Joi.object({ - groupId: Joi.number().required() -}).unknown(false); - -export const createWebsiteGroupSchema = Joi.object({ - // Single group properties - name: Joi.string().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - parentId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }) - ).optional(), - // Batch mode properties - groups: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - parentId: Joi.number().required(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional() - }).unknown(true) - ).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('name', 'groups').unknown(true); - -export const updateWebsiteGroupSchema = Joi.object({ - groupId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - // Single mode properties - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional(), - // Batch mode properties - groups: Joi.array().items( - Joi.object({ - groupId: Joi.number().required(), - name: Joi.string().optional(), - description: Joi.string().optional(), - disableAlerting: Joi.boolean().optional(), - stopMonitoring: Joi.boolean().optional(), - properties: Joi.array().items( - Joi.object({ - name: Joi.string().required(), - value: Joi.string().required() - }).unknown(true) - ).optional() - }).unknown(true) - ).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('groupId', 'groups').unknown(true); - -export const deleteWebsiteGroupSchema = Joi.object({ - groupId: Joi.number().when('groups', { - is: Joi.exist(), - then: Joi.optional(), - otherwise: Joi.required() - }), - deleteChildren: Joi.boolean().optional(), - // Batch mode properties - groups: Joi.array().items( - Joi.object({ - groupId: Joi.number().required(), - deleteChildren: Joi.boolean().optional() - }).unknown(true) - ).min(1).optional(), - batchOptions: Joi.object({ - maxConcurrent: Joi.number().min(1).max(20).optional(), - continueOnError: Joi.boolean().optional() - }).optional() -}).xor('groupId', 'groups').unknown(true); diff --git a/tests/README.md b/tests/README.md index e37e3c3..139bcae 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,6 +1,6 @@ # LogicMonitor MCP Server - Test Suite -This directory contains the comprehensive test suite for the LogicMonitor MCP server. Tests are written using Jest and TypeScript, with full integration testing against a live LogicMonitor portal. +This directory contains the test suite for the LogicMonitor MCP server. Tests are written using Jest and TypeScript, with full integration testing against a live LogicMonitor portal. ## Table of Contents @@ -14,7 +14,7 @@ This directory contains the comprehensive test suite for the LogicMonitor MCP se ## Prerequisites -1. **Node.js**: Version 18.x or 20.x +1. **Node.js**: Version 22.x or 24.x 2. **LogicMonitor Account**: Active account with API access 3. **API Credentials**: Bearer token with appropriate permissions 4. **Test Resources**: At least one active collector in your portal diff --git a/tests/setup.ts b/tests/setup.ts index a4ffeca..ebbe567 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -6,7 +6,7 @@ import dotenv from 'dotenv'; // Load environment variables from .env file -dotenv.config(); +dotenv.config({ quiet: true }); // Verify required environment variables const requiredEnvVars = ['LM_ACCOUNT', 'LM_BEARER_TOKEN']; diff --git a/tests/tools/lm_alert.test.ts b/tests/tools/lm_alert.test.ts index 98d1ade..92f69da 100644 --- a/tests/tools/lm_alert.test.ts +++ b/tests/tools/lm_alert.test.ts @@ -16,6 +16,7 @@ describe('lm_alert', () => { // Try to find an existing alert for update tests const listResult = await client.callTool('lm_alert', { operation: 'list', + autoPaginate: false, size: 1, }); @@ -31,6 +32,8 @@ describe('lm_alert', () => { test('should list alerts with default parameters', async () => { const result = await client.callTool('lm_alert', { operation: 'list', + size: 5, + autoPaginate: false, }); assertToolSuccess(result); @@ -60,6 +63,7 @@ describe('lm_alert', () => { operation: 'list', filter: 'cleared:false', size: 10, + autoPaginate: false, }); assertToolSuccess(result); @@ -71,6 +75,7 @@ describe('lm_alert', () => { test('should list alerts with field selection', async () => { const result = await client.callTool('lm_alert', { operation: 'list', + autoPaginate: false, size: 1, fields: 'id,severity,resourceId', }); @@ -91,6 +96,7 @@ describe('lm_alert', () => { const result = await client.callTool('lm_alert', { operation: 'list', size: 5, + autoPaginate: false, sort: '-startEpoch', // Most recent first }); diff --git a/tests/utils/resourceLinks.test.ts b/tests/utils/resourceLinks.test.ts new file mode 100644 index 0000000..dab6d99 --- /dev/null +++ b/tests/utils/resourceLinks.test.ts @@ -0,0 +1,179 @@ +import { + getAlertLink, + getDashboardLink, + getDeviceLink, + getWebsiteLink +} from '../../src/utils/resourceLinks.js'; +import { createTestClient, TestMCPClient } from './testClient.js'; +import { assertToolSuccess, extractToolData } from './testHelpers.js'; + +describe('resourceLinks', () => { + const company = 'Example'; + + it('builds dashboard link with group hierarchy', () => { + const link = getDashboardLink({ + company, + groupIds: [1, 20], + dashboardId: 42 + }); + expect(link).toBe( + 'https://example.logicmonitor.com/santaba/uiv4/dashboards/dashboardGroups-1,dashboardGroups-20,dashboards-42' + ); + }); + + it('builds dashboard link without groups', () => { + const link = getDashboardLink({ + company, + dashboardId: 'main' + }); + expect(link).toBe( + 'https://example.logicmonitor.com/santaba/uiv4/dashboards/dashboards-main' + ); + }); + + it('builds device link with simplified path', () => { + const link = getDeviceLink({ + company: 'myCompany', + deviceId: 99 + }); + expect(link).toBe( + 'https://mycompany.logicmonitor.com/santaba/uiv4/resources/treeNodes/t-d,id-99?source=details&tab=info' + ); + }); + + it('builds website link with simplified path', () => { + const link = getWebsiteLink({ + company, + websiteId: 101 + }); + expect(link).toBe( + 'https://example.logicmonitor.com/santaba/uiv4/websites/treeNodes/t-s,id-101?source=details&tab=info' + ); + }); + + it('builds alert link', () => { + const link = getAlertLink({ + company, + alertId: 'A-1234' + }); + expect(link).toBe( + 'https://example.logicmonitor.com/santaba/uiv4/alerts/A-1234' + ); + }); + + it('throws when required identifiers are missing', () => { + expect(() => + getDeviceLink({ + company, + deviceId: '' as unknown as number + }) + ).toThrow('deviceId is required to build URLs.'); + }); +}); + +describe('resource link samples (console output)', () => { + let client: TestMCPClient; + const company = global.testConfig?.lmAccount ?? 'example'; + + beforeAll(async () => { + client = await createTestClient('resource-link-samples'); + }); + + const sampleConfigs: Array<{ + label: string; + tool: string; + }> = [ + { label: 'dashboard', tool: 'lm_dashboard' }, + { label: 'device', tool: 'lm_device' }, + { label: 'website', tool: 'lm_website' }, + { label: 'alert', tool: 'lm_alert' } + ]; + + function parseGroupIds(value: unknown): Array | undefined { + if (!value) { + return undefined; + } + if (Array.isArray(value)) { + const parsed = value.filter(v => !(v === null || typeof v === 'undefined')); + return parsed.length ? parsed : undefined; + } + if (typeof value === 'string') { + const parts = value + .split(',') + .map(segment => segment.trim()) + .filter(Boolean); + return parts.length ? parts : undefined; + } + if (typeof value === 'number' || typeof value === 'bigint') { + return [Number(value)]; + } + return undefined; + } + + function buildLink(label: string, sample: unknown): string { + if (!sample || typeof sample !== 'object') { + return 'n/a'; + } + + try { + switch (label) { + case 'dashboard': { + const dashboard = sample as { id?: unknown; groupId?: unknown }; + return getDashboardLink({ + company, + dashboardId: dashboard.id as number | string, + groupIds: parseGroupIds(dashboard.groupId) + }); + } + case 'device': { + const device = sample as { id?: unknown; hostGroupIds?: unknown }; + return getDeviceLink({ + company, + deviceId: device.id as number | string + }); + } + case 'website': { + const website = sample as { id?: unknown; groupId?: unknown }; + return getWebsiteLink({ + company, + websiteId: website.id as number | string + }); + } + case 'alert': { + const alert = sample as { id?: unknown }; + return getAlertLink({ + company, + alertId: alert.id as number | string + }); + } + default: + return 'n/a'; + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + return `link-error: ${message}`; + } + } + + for (const config of sampleConfigs) { + test(`logs sample ${config.label}`, async () => { + const result = await client.callTool(config.tool, { + operation: 'list', + size: 1, + autoPaginate: false, + }); + + assertToolSuccess(result); + + const data = extractToolData<{ items?: unknown[] }>(result); + const items = Array.isArray(data.items) ? data.items : []; + const sample = items[0] ?? null; + const link = buildLink(config.label, sample); + + console.log(`[resource-links] sample ${config.label} link: ${link}`); + + expect(Array.isArray(items)).toBe(true); + }, 30000); + } +}); + diff --git a/tests/utils/testClient.ts b/tests/utils/testClient.ts index 352880f..48eeb9e 100644 --- a/tests/utils/testClient.ts +++ b/tests/utils/testClient.ts @@ -1,8 +1,10 @@ /** * Test client wrapper for MCP server - * Provides a simplified interface for testing tool calls + * Uses InMemoryTransport for proper SDK-based testing */ +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js'; import { createServer, ServerConfig } from '../../src/server.js'; import { SessionManager } from '../../src/session/sessionManager.js'; import winston from 'winston'; @@ -12,13 +14,15 @@ export interface ToolCallResult { content: Array<{ type: string; text: string }>; data?: unknown; error?: string; + isError?: boolean; } export class TestMCPClient { - private server: Awaited>; + private client!: Client; private sessionManager: SessionManager; private sessionId: string; private logger: winston.Logger; + private _credentials: { lmAccount: string; lmBearerToken: string }; constructor( lmAccount: string, @@ -28,25 +32,18 @@ export class TestMCPClient { this.sessionId = sessionId; this.sessionManager = new SessionManager(); - // Create a logger that only logs errors in tests this.logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'error', format: winston.format.json(), transports: [new winston.transports.Console({ silent: process.env.LOG_LEVEL !== 'debug' })], }); - // Initialize server (will be set in init()) - this.server = null as any; - - // Store credentials for init this._credentials = { lmAccount, lmBearerToken, }; } - private _credentials: { lmAccount: string; lmBearerToken: string }; - async init(): Promise { const config: ServerConfig = { credentials: { @@ -57,7 +54,17 @@ export class TestMCPClient { logger: this.logger, }; - this.server = await createServer(config); + const { server: mcpServer } = await createServer(config); + + // Create linked in-memory transports + const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair(); + serverTransport.sessionId = this.sessionId; + + // Connect server and client via in-memory transports + await mcpServer.server.connect(serverTransport); + + this.client = new Client({ name: 'test-client', version: '1.0.0' }); + await this.client.connect(clientTransport); } /** @@ -65,44 +72,54 @@ export class TestMCPClient { */ async callTool(toolName: string, args: Record): Promise { try { - // Get the request handler - const handler = (this.server.server as any)._requestHandlers.get('tools/call'); - - if (!handler) { - throw new Error('Tool call handler not found'); - } - - const request = { - method: 'tools/call', - params: { - name: toolName, - arguments: args, - }, - }; - - const extra = { - sessionId: this.sessionId, - }; + const response = await this.client.callTool({ + name: toolName, + arguments: args, + }); - const response = await handler(request, extra); - - // Parse the response - const content = response.content || []; + const content = (response.content || []) as Array<{ type: string; text: string }>; let data: unknown = undefined; - if (content.length > 0 && content[0].type === 'text') { + for (const block of content) { + if (block.type !== 'text' || typeof block.text !== 'string') continue; + if (!block.text.trim()) continue; + + // Try direct JSON parse first try { - data = JSON.parse(content[0].text); - } catch (e) { - // If parsing fails, keep as text - data = content[0].text; + data = JSON.parse(block.text); + break; + } catch { + // buildToolResponse wraps JSON as "Full LogicMonitor payload:\n{...}" + const payloadPrefix = 'Full LogicMonitor payload:\n'; + if (block.text.startsWith(payloadPrefix)) { + try { + data = JSON.parse(block.text.slice(payloadPrefix.length)); + break; + } catch { /* not JSON payload */ } + } + if (typeof data === 'undefined') { + data = block.text; + } } } + if (typeof data === 'undefined' && content.length > 0 && content[0].type === 'text') { + data = content[0].text; + } + + // Extract error message from isError responses + const isError = response.isError as boolean | undefined; + let error: string | undefined; + if (isError && content.length > 0 && content[0].type === 'text') { + error = content[0].text; + } + return { - success: true, + success: !isError, content, data, + error, + isError, }; } catch (error) { const message = error instanceof Error ? error.message : String(error); @@ -141,6 +158,13 @@ export class TestMCPClient { setSessionVariable(key: string, value: unknown) { return this.sessionManager.setVariable(this.sessionId, key, value); } + + /** + * Close the client connection + */ + async close(): Promise { + await this.client.close(); + } } /** @@ -156,4 +180,3 @@ export async function createTestClient(sessionId?: string): Promise